Transparentfarbe beim zeichnen von Bitmaps



  • Hallo

    Mein Problem ist folgendes: Mit der Funktion DrawIconEx kann man ja ein Icon auf einen DC zeichnen. Dabei werden ja die transparenten Stellen des Icons ausgelassen.

    Nun möchte ich das gleiche mit einer Bitmap machen. Habe folgenden (bereits funktionierenden) Code:

    bool DrawBitmapEx(HDC hDC, int iXPos, int iYPos, HBITMAP hbmpSrc, int iWidth, int iHeight, bool fAdaptImg)
    {
    	if(hDC == NULL || hbmpSrc == NULL)
    		return (false);
    	HDC hdcMem = CreateCompatibleDC(hDC);
    	HBITMAP hbmpPrev = reinterpret_cast<HBITMAP>(SelectObject(hdcMem, hbmpSrc));
    	if(fAdaptImg)
    	{
    		BITMAP bmInfo;
    		GetObject(hbmpSrc, sizeof(BITMAP), &bmInfo);
    		StretchBlt(hDC, iXPos, iYPos, iWidth, iHeight, hdcMem, 0, 0, bmInfo.bmWidth, bmInfo.bmHeight, SRCCOPY);
    	}
    	else
    		BitBlt(hDC, iXPos, iYPos, iWidth, iHeight, hdcMem, 0, 0, SRCCOPY);
    	SelectObject(hdcMem, hbmpPrev);
    	DeleteDC(hdcMem);
    	return (true);
    }
    

    Habt ihr ne Idee wie ich die Transparenz mit rein bekomme (außer SetPixel + Schleifen :p ) ?



  • google mal nach Bitmaske.
    Die sind Schwarzweiß und zeigen den GDI funktionen was gezeichnet werden soll und was nicht.

    mfg tobZel



  • Es gibt TransparentBlt() und wenn du GDI+ nimmst, haste nicht nur einfache Transparenz zur Verfügung sondern sogar nen Alpha-Kanal 😉

    msdn-Remarks beachten:

    Windows 95/98: TransparentBlt contains a memory leak that can exhaust system resources. To draw a transparent bitmap using BitBlt, see Knowledge Base article 79212.

    Quellcode gibts also auch unter KB79212 😉



  • tobZel schrieb:

    [...]
    google mal nach Bitmaske.
    [...]

    Sind aber IMHO nicht für Bitmaps, sondern nur für Icons.

    geeky schrieb:

    [...]

    Windows 95/98: TransparentBlt contains a memory leak that can exhaust system resources.[...]

    [...]

    😃 LOL 😃



  • Zum Zeichnen von Bitmaps mit einer transparenten Farbe, guck mal unter www.henkessoft.de/C++/MFC/mfc_einsteigerbuch_kapitel9.htm, da kommt das vor. Ist zwar mit MFC, aber die Vorgänge sind ja, was das Transparenzzeug betrifft, analog.


Anmelden zum Antworten