我的问题是:如果我直接在先前从.PNG文件加载的CImage上绘制一些文本。文本本身是透明的(你可以通过它看到背景颜色),并且没有办法让它具有所需的颜色。
CImage image;
image.Load ( "myimage.png" ) ;
//Draw some text
HDC dc = image.GetDC ();
SetTextColor ( dc, RGB( 0 , 0 , 0 ) ); ///< I think the problem is here
DrawText ( dc, "Hello world!", -1, CRect ( 0 , 0 , 200 , 200 ), 0 );
image.ReleaseDC ();
//Render of the image somewhere
image.Draw ( someOutDC , 0 , 0 );
我尝试了不同的RGB值和.PNG,有或没有透明色但结果相同。只有当我从.BMP或.JPG加载它才有效(但我需要一个.PNG)。 有关于.PNG的内容,但我不知道如何正确设置文本颜色。
我忘了这么说 我也尝试过这样的Alpha RGB:
SetTextColor ( dc , RGB (0,0,0) + 255 << 24 );
......但没有任何改变......有什么建议吗?
答案 0 :(得分:1)
正如@enhzflep所说,GDI无法正确处理alpha通道,因此在处理32 Bpp图像时,你必须使用这样的GDI +功能:
#include <GdiPlus.h>
#pragma comment(lib,"gdiplus.lib")
//....
Gdiplus::Graphics graphics ( image.GetDC () );
Gdiplus::Font font ( &FontFamily ( L"Arial" ), 10 );
Gdiplus::SolidBrush brush ( Color ( 255, 0, 0, 0 ) );
graphics.DrawString ( L"Hello world", -1, &font, PointF(0.0f, 0.0f), &brush );
image.ReleaseDC()
答案 1 :(得分:0)
您需要将BkMode设置为TRANPARENT CDC::SetBkMode。所以文本颜色用于绘制字符,背景是透明的。
使用GDI无法使用Alpha通道绘制PNG透明度。你可以用GDI +做到这一点。请参阅示例here