28. März 2024, 23:46
VB-fun.de - Beitragsübersicht zum VB-/VBA-Forum-Archiv 0428
  VB6: Monochrome Bitmap-Maske für PlgBlt
 Von  NW90
 Am  26. April 2011 um 22:48:41
 Frage Hallo,

ich möchte die PlgBlt-API verwenden. Dazu kann man eine Bitmap als Maske für Transparenz angeben. Leider muss diese monochrom sein. D. h. es reicht nicht aus, wenn die Bitmap nur Schwarz und Weiß enthält. Sie muss auch wirklich nur 1 Bit pro Pixel im Speicher nutzen. Ich würde eine solche Bitmap aber gerne aus einer 24bit-Bitmap erstellen.
Mein Problem ist nicht die Konvertierung der Farben. Aber wie bekomme ich eine zweifarbige 24bit-Bitmap in eine reale 1bit-Bitmap konvertiert, sodass ich sie als Parameter für PlgBlt verwenden kann?

Danke für jede Hilfe
 Antwort:
 Von Neptun
 Am 27. April 2011 um 22:24:26
 Antwort Hallo NW90,
probier' mal dieses:
  Dim Breite As Long, Hoehe As Long
Dim MaskCol As Long
Dim OldColor As Long
Dim Tmphdc As Long
Dim OldHandle As Long
Dim bmpMono As Long
Dim Punkt(2) As PointAPI

picQuelle.ScaleMode = vbPixels
picQuelle.AutoRedraw = True
Breite = picQuelle.ScaleWidth
Hoehe = picQuelle.ScaleHeight
MaskCol = RGB(255, 255, 255) ' <- Maskenfarbe hier einsetzen
' DC erstellen
Tmphdc = CreateCompatibleDC(0)
' Monochrombitmap erstellen
bmpMono = CreateBitmap(Breite, Hoehe, 1, 1, ByVal 0&)
' Monochrombitmap selektieren
OldHandle = SelectObject(Tmphdc, bmpMono)
' Maskenfarbe setzen
OldColor = SetBkColor(picQuelle.hDC, MaskCol)
' Maskenbild erstellen
Call BitBlt(Tmphdc, 0, 0, Breite, Hoehe, picQuelle.hDC, 0, 0, vbSrcCopy)
' Maske invertieren (bei Bedarf)
Call BitBlt(Tmphdc, 0, 0, Breite, Hoehe, 0, 0, 0, vbDstInvert)
' alte Backcolor zurück
Call SetBkColor(picQuelle.hDC, OldColor)
' alter Handle zurück
Call SelectObject(Tmphdc, OldHandle)
' DC löschen
Call DeleteDC(Tmphdc)
' Grafik ausgeben
Call PlgBlt(picZiel.hDC, Punkt(0), picQuelle.hDC, _
0, 0, Breite, Hoehe, bmpMono, 0, 0)
' Maskenbild löschen
Call DeleteObject(bmpMono)
picZiel.Refresh ' Auffrischen erzwingen
Du kannst auch das Monochrombild mit einem Zeichenprogramm in 1 Bit
Farbtiefe speichern. Dann kommst du mit weniger Api-Funktionen aus.
Siehe dazu:

[url=" http://www.activevb.de/cgi-bin/upload/download.pl?id=2533"][/url]
Gruss,

Neptun
[ VB-/VBA-Forum | Archiv 0428 | Archiv-Übersicht ]
 Antworten
VB6: Monochrome Bitmap-Maske für PlgBlt - NW90 26. April 2011 um 22:48:41
Re: Monochrome Bitmap-Maske für PlgBlt - Neptun 27. April 2011 um 00:38:03
Re: Monochrome Bitmap-Maske für PlgBlt - NW90 27. April 2011 um 14:45:12
Re: Monochrome Bitmap-Maske für PlgBlt - Frank 27. April 2011 um 21:41:32
Re: Monochrome Bitmap-Maske für PlgBlt - NW90 27. April 2011 um 21:48:46
Re: Monochrome Bitmap-Maske für PlgBlt - Neptun 27. April 2011 um 22:24:26
PlgBlt - Bug ? - NW90 28. April 2011 um 00:11:11
Re: PlgBlt - Bug ? - Neptun 28. April 2011 um 01:20:04
Re: PlgBlt - Bug ? - Frank 28. April 2011 um 06:47:38
Re: PlgBlt - Bug ? - NW90 28. April 2011 um 07:43:31
Re: PlgBlt - Bug ? - Frank 29. April 2011 um 06:28:26

Zum Seitenanfang

Startseite | VB-/VBA-Tipps | Projekte | Tutorials | API-Referenz | Komponenten | Bücherecke | Gewinnspiele | VB-/VBA-Forum | DirectX | DirectX-Forum | VB.Net | VB.Net-Forum | Chat | Spielplatz | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum