直接在.png加载的cimage上绘制时,将文本颜色设置为
Set the text color when drawing directly on a CImage loaded from .png
我的问题是:如果我直接在先前从.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 );
...但是什么都没有改变...任何建议?
正如@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()
您需要将bkmode设置为tranparent cdc :: setbkmode。因此,文本颜色用于绘制字符,背景是透明的。
GDI不可能用Alpha通道绘制PNG透明。您可以使用GDI 来完成此操作。请参阅此处的样本
相关文章:
- 通过样式表仅在QTabWidget中应用文本颜色一个特定选项卡
- 控制台中文本颜色异常
- 文本颜色 QPlainTextEdit QT
- 更改悬停在Gtkbutton的文本颜色
- 如何将控制台输出的文本颜色更改为红色,但如果从Powershell或CMD运行,背景将保持相同的颜色
- 设置子窗口的文本颜色
- 更改数组中元素的文本颜色
- 尝试选择文本颜色
- MFC Rich编辑控件2.0文本颜色
- 无法更改 Visual Studio 2010 中输出的文本颜色和文本背景
- 使用 conio.h 更改文本颜色时出错
- Mouseover SDL2时更改文本颜色
- 为qlineedit设置了背景图像时,如何在qlineedit中设置文本颜色
- 如何从qplaintExtedIt获取文本颜色
- 自定义图形列表视图项目不更改文本颜色
- 直接在.png加载的cimage上绘制时,将文本颜色设置为
- 静态文本颜色
- QMenu:为特定 QAction 设置文本颜色
- 如何更改代码块中的文本颜色和控制台颜色
- Win32:设置富编辑的默认字体和文本颜色