【发布时间】:2014-02-10 21:00:15
【问题描述】:
我的问题是:如果我直接在以前从 .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 );
...但没有任何改变...有什么建议吗?
【问题讨论】:
-
听起来 CImage 正在从 PNG 文件制作 32 位 DIB。不幸的是,仅用于绘制文本的 GDI 函数(有用地)操纵 24 个 RGB 位 - 它们将 8 个 Alpha 位设置为 0。解决方案是使用 GDI+ 文本绘制函数,它可以处理完整的 32 位。
-
我认为你是对的,我将研究如何做到这一点。
-
就是这样,我使用了 GDI+,它运行良好。很抱歉我的分数太低,明天我才能回答自己。
标签: c++ mfc visual-studio-2013 atl