TransparentBlt - einfaches beispiel?
-
Hallo,
ich will ein Bitmap darstellen.. derzeit mach ich das mit bitblt.
Nun will ich aber, dass die Farbe RGB 0,0,0 nicht angezeigt wird (also transparent ist.
Dazu kann man ja TransparentBlt verwenden.aber die beispiele die ich im netz gefunden habe, schnall ich rigendwie nciht, weil so viel aussenrum noch zusätzlich gebaut wurde.. .
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/bitmaps_2y9g.asp
irgendwie raff ichs netkann ich "einfach" das bitblt durch TransparentBlt ersetzen?
kann mir bitte jemand ein wirklcih simples beispiel dazu mal posten?
das Bitmap lade ich derzeit per LoadImage.
vielen Dank
viele Grüße
Edwart
-
Hi,
also schwarz würde ich nicht gerade als tranzparente Farbe wählen. Nimm eine die weniger oft vor kommt, z.B. lila ( 255, 0, 255 );
Du mußt noch eine s/w Maske des Bitmaps erstellen.
Also mit CreateBitmap.
Dort setzt Du die Hintergrundfarbe (SetBkColor) auf lila.Beim eigentlichen blitten sind 3 Vorgänge notwendig:
COLORREF oldBack = SetBkColor( originalbitmap, COLORREF(RGB(255,0,255)) );
BitBlt( originalbitmap, SRCINVERT );
BitBlt( bitmapmaske, SRCAND );
BitBlt( originalbitmap, SRCINVERT );
SetBkColor( originalbitmap, oldBack );Du kannst aber auch gerne mal hier schauen:
http://home.arcor.de/ksros/gfxlibDa brauchste Dich um solche Dinge nicht mehr zu kümmern.
C ya
-
hallo,
vielen Dank für die Antwort.
Werde das mal heute ausporbieren...Der Tip mit der gfxlib ist gar nicht schlecht... . vereinfacht sowas ziemlich
-
Habs hinbekommen.. jibbi
für den fall das jemand vor dem gleichen problem steht, anbei meinen Code der bei mir funktioniert
case WM_CREATE: Animwnd = (HBITMAP)LoadImage(0,"explosion1.bmp",IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|LR_CREATEDIBSECTION|LR_LOADTRANSPARENT); return 0; case WM_PAINT: hdcAnim = BeginPaint (hwnd, &psAnim) ; hdcMemAnim = CreateCompatibleDC (hdcAnim) ; SelectObject (hdcMemAnim, Animwnd); TransparentBlt (hdcAnim, 0, 0, 65, 70, hdcMemAnim,0, 0,64,64, RGB(255,0,255) ) ; EndPaint (hwnd, &psAnim) ; return 0;
vielen dank für die Hilfe
viele grüße
Edwart
-
Schön
Aber, daß Dein Code im Paintbereich einen Overkill verursacht weißt Du?
Du erstellst, bei jeder Paint-Nachricht, ein neues DeviceContext.
Doch nichts weit und breit wo Du es wieder freigibst.Also ein
DeleteDC( hdcMemAnim );
tut not!CU
-
-
TGGC schrieb:
FlanDerZ schrieb:
einen Overkill
Raumpatrouille Orion?
Bye, TGGC (Ein Jahr Helden)
Nein, er meint so was wie dich. Du verursacht auch einen Overkill mit deinen überflüssigen Antworten.
-
hab das
hdcMemAnim = CreateCompatibleDC (hdcAnim) ;
jetzt ins 'WM_CREATE' geschoben.. da sollte es ja eigentlich nur einmal erstellt werden, oder?
Weil das Fenster wird ja nur einmal gebaut!