c++ DirectX DrawText在多种颜色
C++ DirectX DrawText in multiple colors
我使用ID3DXFont接口来绘制文本,只要完整的字符串是单色的,就完全符合我的需求。现在我想用不同的颜色画一条线。例如"abc",a是红色的,b是黄色的,等等。我知道我可以单独画出每个字母,每次给DrawText
一个不同的Color
参数。唯一的问题是,我不知道我应该在每个字母之后偏移多少像素,因为每个字母都有不同的宽度。硬编码宽度并不是一个好的解决方案。
ID3DXFont
接口不允许您在DrawText
的单个调用中绘制多种颜色。但是,它可以为您提供您希望使用DT_CALCRECT
标志绘制的任何文本的边界矩形,因此您不需要在字体中硬编码特定字形的宽度。这也意味着你可以切换字体和/或字体的大小,而不需要修改你的绘图代码,或硬编码新的宽度。例如:
ID3DXFont* font = ...;
const char* strings[] = { "A", "i", "C" };
D3DCOLOR colors[] = { D3DCOLOR_ARGB(255, 255, 0, 0), D3DCOLOR_ARGB(255, 0, 255, 0), D3DCOLOR_ARGB(255, 0, 0, 255) };
RECT r = { 10,10,0,0}; // starting point
for (int i = 0; i < _countof(strings); ++i)
{
font->DrawText(NULL, strings[i], -1, &r, DT_CALCRECT, 0);
font->DrawText(NULL, strings[i], -1, &r, DT_NOCLIP, colors[i]);
r.left = r.right; // offset for next character.
}
注意:我从你的例子中使用' I '而不是'b',因为很明显,矩形是正确的,因为' I '(通常)是一个非常薄的字形。还要注意,这假定只有一行文本。计算出来的矩形也包括高度,所以如果你有多条线,你也可以使用计算出来的矩形的高度来偏移位置。
相关文章:
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 如何在内核C++中使用1920x1080x16M图形或类似的16M颜色?(VGA)
- 如何在24位SDL_Surface上设置像素的颜色
- 如何在directx/c++中进行平移/缩放操作
- 如何从SDL_Surface获取特定像素的颜色
- DrawIndexedInstanced 具有不同的 Index Count per Instance (Directx
- 列表视图更改选择颜色
- GtkTreeView 交替行颜色
- Directx 11 - CompileFromFile() is not compiling
- dx11 渲染到纹理仅显示透明颜色
- 字节数组初始化会导致 DirectX 崩溃
- 在 DirectX 11 中从 GPU 读回顶点缓冲区(并获取顶点)
- 使用 OpenGL 4.5 更改所选顶点的颜色
- 为什么我的 LEGACY OPENGL 颜色反转了?
- 使用 DirectX 11 插值背景颜色?
- c++,directx 12:颜色选择问题
- DirectX SDK安装颜色更改
- 顶点缓冲对象的颜色- DirectX vs OpenGL
- 当光照启用时,DirectX 9顶点颜色会消失
- c++ DirectX DrawText在多种颜色