Transparentes CDC für Bitmap



  • Ich erzeuge mir ein CDC welches ich anschließend transparent mache,
    dieses neue CDC kann ich mir dann auch wunderbar anzeigen lassen.

    Nun will ich daraus ein transparentes CBitmap erzeugen, was ich momentan so mache:

    // Alles in ein TempDC kopieren, um ein Bitmap daraus zu erstellen
    	CDC *TempDC = new CDC;
    	TempDC->CreateCompatibleDC(pDC);
    	CBitmap bitmap;
    	bitmap.CreateCompatibleBitmap(pDC, m_nTransBmpWidth, m_nTransBmpHeight);
    
    	TempDC->SelectObject( &bitmap );
    	TempDC->BitBlt(0,0, m_nTransBmpWidth, m_nTransBmpHeight, pDC, 10, 10, SRCCOPY);
    	TempDC->BitBlt(0,0,m_nTransBmpWidth,m_nTransBmpHeight,m_pMaskMemDC,0,0,SRCAND);
    	TempDC->BitBlt(0,0,m_nTransBmpWidth,m_nTransBmpHeight,m_pTransMemDC,0,0,SRCPAINT);
    

    Mein Problem ist nun das ich nun ein Bitmap bekomme, welches zwar dort wo ich es durchsichtig gemacht habe, durchsichtig ist, aber insgesamt den grauen Hintergrund meines CDCs besitzt und dort eben nicht transparent ist sondern grau.

    Ich kriegs nicht auf die Reihe ein transparentes CDC zu erstellen, dem ich dann mittels

    TempDC->BitBlt(0,0,m_nTransBmpWidth,m_nTransBmpHeight,m_pMaskMemDC,0,0,SRCAND);
    TempDC->BitBlt(0,0,m_nTransBmpWidth,m_nTransBmpHeight,m_pTransMemDC,0,0,SRCPAINT);
    

    das eigentliche Bild drauf blitten kann.

    Vielleicht kann mir einen helfen ?

    Edit: Vielleicht kann man ein Transparentes Icon als resource laden, dieses vergrößern, und darauf das transparente Bild blitten ?
    Aber wie ? Oder schlechte Idee ? Weiss garnicht mehr weiter...





  • Tja das hilft mir halt überhaupt nicht weiter, und beantwortet auch meine Frage nicht, denn soweit, das ich ein transparentes Bitmap habe, bin ich schon,

    aber ich kann das Bild aus dem CDC nicht mit transparenten alphakanal abspeichern, weil statt dessen der hintergrund der applikation (grau) dort erscheint, wo es eigentlich durchsichtig sein sollte.

    Und das Bild ist durchsichtig, da dies ja vorher einen weissen hintergrund hatte.



  • Du musst den Brush deiner Fensterklasse auf den Null-Brush setzen.

    SetClassLong(m_hWnnd,GCL_HBRBACKGROUND,(LPARAM)GetStockObject(NULL_BRUSH));
    

Anmelden zum Antworten