| |

Fortgeschrittene ProgrammierungRe: 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 |  |
 | 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 |
  |
|
Neu! sevEingabe 3.0 
Einfach stark!
Ein einziges Eingabe-Control für alle benötigten Eingabetypen und -formate, inkl. Kalender-, Taschenrechner und Floskelfunktion, mehrspaltige ComboBox mit DB-Anbindung, ImageComboBox u.v.m. Weitere InfosTipp des Monats Oktober 2025 Matthias KozlowskiUmlaute konvertierenErsetzt die Umlaute in einer Zeichenkette durch die entsprechenden Doppelbuchstaben (aus ä wird ae, usw.) Access-Tools Vol.1 
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|