CDC -> Bitmap mit Transparenz Blitten



  • hi Leute,
    Ich hab hier n Bitmap, das ich in nem CDC ausgewählt hab. Das will ich jetzt so auf n anderen CDC blitten, dass eine bestimmte Farbe transparent ist ... Weiss jemand, wie ich das mache ?



  • hi

    also wenn ich dich richtig verstehen willst du eine bestimmte Farbe in deinem Bitmap durchsichtig machen.

    Da musst du soweit ich weiß eine Maske für dein Bitmap erstellen.

    Ich schau mal ob ich noch was Code finde wo das gemacht wird. *such such such such ahhhh gefunden*

    void CMacButton::DrawBitmap(CDC *pDC, CBitmap &BitmaptoDraw)
    {
    	// Ist das Bitmap geladen ???
    	if(this->m_bBitmapLoaded != TRUE)
    	{
    		return;
    	}
    
    	CRect rc;
    	GetClientRect(rc);
    
    	COLORREF crOldBack = pDC->SetBkColor( RGB(255, 255, 255));
    	COLORREF crOldText = pDC->SetTextColor( RGB(0, 0, 0));
    	CDC dcImage, dcTrans;
    
    	// Zwei Speicher Geräte Kontext für das Bild und die Maske
    	dcImage.CreateCompatibleDC( pDC );
    	dcTrans.CreateCompatibleDC( pDC );
    
    	CBitmap *pOldBitmapImage;
    	pOldBitmapImage = dcImage.SelectObject(&BitmaptoDraw);
    
    	// Erstellen einer Bitmapmaske
    	CBitmap bitmapTrans;
    	int nWidth	= rc.Width();
    	int nHeight	= rc.Height();
    	// Erstellen einer Monochrombitmaps
    	bitmapTrans.CreateBitmap( nWidth, nHeight, 1, 1, NULL);
    
    	CBitmap *pOldBitmapTrans = dcTrans.SelectObject(&bitmapTrans);
    
    	dcImage.SetBkColor(m_BkColor);
    	dcTrans.BitBlt( 0, 0, nWidth, nHeight, &dcImage, 0, 0, SRCCOPY);
    
    	pDC->BitBlt( 0, 0, nWidth, nHeight, &dcImage, 0, 0, SRCINVERT);
    	pDC->BitBlt( 0, 0, nWidth, nHeight, &dcTrans, 0, 0, SRCAND);
    	pDC->BitBlt( 0, 0, nWidth, nHeight, &dcImage, 0, 0, SRCINVERT);
    
    	dcImage.SelectObject(pOldBitmapImage);
    	dcTrans.SelectObject(pOldBitmapTrans);
    
    	pDC->SetBkColor(crOldBack);
    	pDC->SetTextColor(crOldText);
    }
    

    wenn du willst kann ich dir auch den gesamten Quellcode per Email schicken.
    crow8045@web.de


Anmelden zum Antworten