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
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.
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einfach DrawText() mit transparentem hintergrund ohne MFC:
...
--hfrmobile
InformationsquelleAutor hfrmobile
Etwa 10 Minuten, nachdem diese Frage lese ich meinen eigenen Kommentar und erkannte, dass "einige windows" bedeutet, es war in Bezug auf die windows weitergegeben werden. Speziell die verwendete schriftart aus, sagte Fenster. Fonts mit einem Standard-Eigenschaften wurden mit der seltsamen Vermischung.
Am Ende des Tages beschloss ich, ich brauchte, um zu ändern den schriftart, deaktivieren Sie die Dinge in Unordnung zu meiner Zeichnung code. Ich schließlich verengt Sie sich auf den übeltäter, der das problem verursacht:
Damit ich noch
FillSolidRect
pink-und ziehe dann meine Symbole, text, was auch immer ich will, etc. Anschließend die Maske mit den rosa Pixel. Mit der font-Einstellung der Qualität nicht mehr Mischungen rosa in der schriftart, der text und es sieht gut aus. Der else-Fall oben erstellt eine Standard-schriftart zu verwenden, bei derCWnd*
vergangen, in der nicht über eine gültige angegeben.InformationsquelleAutor AJG85