Gewusst wie: zeichnen von text verwenden von CDC mit transparentem hintergrund CBitmap?

Ich habe den folgenden code, welche Art von Werken, sofern Sie Maske den rosa Pixel aber was ich eigentlich will, ist transparent bits wie eine PNG-Datei, so dass ich vermeiden kann alpha-blending-Probleme und die Notwendigkeit, die Maske, die aus einer bestimmten Farbe überall ein bitmap verwendet wird.

CClientDC dc(pWnd);
CDC memDC;

if(!memDC.CreateCompatibleDC(&dc))
   return NULL;

CRect bitmapRect;
bitmapRect.SetRectEmpty();

CFont* pOldFont = memDC.SelectObject(pWnd->GetFont());
CSize fontSize = memDC.GetTextExtent(imageText);

bitmapRect.right = fontSize.cx;
bitmapRect.bottom = fontSize.cy;

CBitmap bitmap;
if(!bitmap.CreateCompatibleBitmap(&dc, bitmapRect.Width(), bitmapRect.Height()))
   return NULL;

CBitmap* pOldMemDCBitmap = memDC.SelectObject(&bitmap);

memDC.FillSolidRect(&bitmapRect, RGB(255,0,255));
//memDC.SetBkMode(TRANSPARENT); //doesn't work
//memDC.SetBkColor(TRANSPARENT); //doesn't work
memDC.SetTextColor(GetSysColor(COLOR_WINDOWTEXT));

//memDC.DrawText(imageText, bitmapRect, DT_TOP|DT_LEFT|DT_NOCLIP); //same difference
memDC.TextOut(0, 0, imageText);

memDC.SelectObject(pOldMemDCBitmap);
memDC.SelectObject(pOldFont);
memDC.DeleteDC();

CImageList bmImage;
bmImage.Create(bitmapRect.Width(), bitmapRect.Height(), ILC_COLOR32|ILC_MASK, 0, 1);
//this masks out the pink but for some windows blends edges of text causing pink text instead of black!
bmImage.Add(&bitmap, RGB(255,0,255));

Ist nur der bug gefüllt Tier, MFC-fehlerhafte oder bin ich etwas fehlt?

IIRC SetBkMode(TRANSPARENT) sollte den trick tun. Du hast nicht zufällig nur versuchen, einschließlich, line-in Kombination mit der anschließenden Aufruf SetBkColor(TRANSPARENT) (wo es vermutlich interpretieren würde die ständige TRANSPARENT als Farbe Wert ist, und vielleicht überschreiben die Transparenz-Modus)...?
Nein, diejenigen, die gegenseitig exklusiv sind nur Reste der Dinge, die ich versucht ... ich glaube, ich habe gerade herausgefunden, mein problem aber testen, bevor ich update oder post eine Antwort.

InformationsquelleAutor AJG85 | 2011-10-04

Schreibe einen Kommentar