vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevDataGrid - Gönnen Sie Ihrem SQL-Kommando diesen krönenden Abschluß!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
Re: Ungültiges Handle bei Picturebox mit API. 
Autor: Fieber
Datum: 01.12.07 00:32

Ich benutze: WindowXP, VB6-sp6, 1 GB RAM.
Bei Bilder über 4 Mill. Pixel Error Fehler 6.
Kleinere Bilder funktionieren tadellos!
Den Wert von hMask1, hDCMask1 ist 9 stellig (Bild ist geladen).
Es hängt sich meistens bei Test = 8 auf.
Ich vermute es liegt an BitBlt().
Hie nochmal die ganze Routine:

Private Function MonoMask(Source As PictureBox, ByVal MaskColor&, Mask1 As PictureBox, ByVal Mask2 As PictureBox, ByVal Mask3 As PictureBox) As Boolean

Dim hDCMask1&, hMask1&, hDCMask2&, hMask2&
Dim hPrevMask1&, hPrevMask2&, W&, H&
Dim I%, J%, Col&, Test%
Dim ret As Long

On Error GoTo Err
W = Source.Width
H = Source.Height
Mask1.Width = W
Mask1.Height = H
Mask2.Width = W
Mask2.Height = H
Mask3.Width = W
Mask3.Height = H
'Generieren zweier Bitmaps
hDCMask1 = CreateCompatibleDC(Mask1.hDC)
hDCMask2 = CreateCompatibleDC(Mask1.hDC)

Test = 1
hMask1 = CreateBitmap(W, H, 1, 1, ByVal 0&)
hMask2 = CreateBitmap(W, H, 1, 1, ByVal 0&)

Test = 2
hPrevMask1 = SelectObject(hDCMask1, hMask1)
hPrevMask2 = SelectObject(hDCMask2, hMask2)

Test = 3
'Maskenfarbe des Originalbildes festlegen
Call SetBkColor(Source.hDC, MaskColor)

Test = 4
'Monochrome Maske des Originalbildes erstellen
Call BitBlt(hDCMask1, 0, 0, W, H, Source.hDC, _
0, 0, SRCCOPY)
Test = 5
'Erstellte monochrome Maske nach PicMask kopieren
Call BitBlt(Mask1.hDC, 0, 0, W, H, _
hDCMask1, 0, 0, SRCCOPY)
Test = 6
'S/W Fehlerbehandlung PicMask (Sollte Maske grau sein)
If sysMask_Err Then
Mask1.Picture = Mask1.image
ret = ToGreyByPalette(Mask1.hDC, Mask1.Picture, Mask1.image, 2) 'ModSW
End If

Test = 7
'Inverse Maske der erstellen Maske generieren
Call BitBlt(hDCMask2, 0, 0, W, H, _
hDCMask1, 0, 0, vbNotSrcCopy)
Test = 8
'Erstellte inverse Maske nach MaskInvers kopieren PicDummy
Call BitBlt(Mask2.hDC, 0, 0, W, H, _
hDCMask2, 0, 0, SRCCOPY)
Test = 9
'S/W Fehlerbehandlung PicImage
If sysMask_Err Then
Mask2.Picture = Mask2.image
ret = ToGreyByPalette(Mask2.hDC, Mask2.Picture, Mask2.image, 2) 'ModSW
End If

Test = 10
'Beim laden auf S/W-Fehler prüfen. (WindowBlinds)
If Not (sysMask_ErrCheck) Then 'PicDummy
sysMask_ErrCheck = True
For I = 1 To W - 1
For J = 1 To H - 1
Col = GetPixel(Mask1.hDC, I, J)
If Col <> vbWhite And Col <> vbBlack Then
sysMask_Err = True
Exit For
End If
Col = GetPixel(Mask2.hDC, I, J)
If Col <> vbWhite And Col <> vbBlack Then
sysMask_Err = True
Exit For
End If
Next J
Next I
End If

Test = 11
'Originalbildes in die Schlußmaske kopieren PicImage
Call BitBlt(Mask3.hDC, 0, 0, W, H, Source.hDC, _
0, 0, SRCCOPY)
Test = 12
'AND der Schlußmaske mit der invertierten Maske
Call BitBlt(Mask3.hDC, 0, 0, W, H, _
Mask2.hDC, 0, 0, SRCAND)
Test = 13
'Erstellte Objekte & DCs wieder freigeben
Call DeleteObject(SelectObject(hDCMask1, hPrevMask1))
Call DeleteObject(SelectObject(hDCMask2, hPrevMask2))

Test = 14
Call DeleteDC(hDCMask1)
Call DeleteDC(hDCMask2)
MonoMask = True
Exit Function

Err:
sysMask_OnErr = True
Call PicErr(Err.Number, "Test: " & Test & " hMask1: " & hMask1 & " hMask2: " & hMask2 & " hPrevMask1: " & hPrevMask1 & " Mask2.hDC: " & Mask2.hDC)
Err = 0
'Erstellte Objekte & DCs wieder freigeben
Call DeleteObject(SelectObject(hDCMask1, hPrevMask1))
Call DeleteObject(SelectObject(hDCMask2, hPrevMask2))
Call DeleteDC(hDCMask1)
Call DeleteDC(hDCMask2)
MonoMask = False

Exit Function

End Function

Gruß
Fieber
http://computer.net-berlin.de - Visual Basic - Tips & Tricks sowie viel Grafik

alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Ungültiges Handle bei Picturebox mit API.1.125Fieber30.11.07 21:36
Re: Ungültiges Handle bei Picturebox mit API.702Zardoz30.11.07 22:22
Re: Ungültiges Handle bei Picturebox mit API.978Fieber01.12.07 00:32
Re: Ungültiges Handle bei Picturebox mit API.750Zardoz01.12.07 02:01
Re: Ungültiges Handle bei Picturebox mit API.752Fieber01.12.07 17:43
Re: Ungültiges Handle bei Picturebox mit API.750Fieber17.12.07 23:36

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel