如何使用 WinAPI 将文本绘制到字节数组
how to draw text to byte array using winapi
我需要将文本绘制到字节数组,以便稍后将其转换为 DirectX11 纹理。我尝试了很多想法,例如这样:
HDC hdc= GetDC( g_hWnd );
int w= 600;
int h= 450;
unsigned* buf= new unsigned [w*h];
for( int a=0;a<w*h;a++)buf[a]= 0x0;
HBITMAP hbmp= CreateBitmap( w, h, 1, 4*8, buf );
if(!hbmp)throw "error bmp";
HDC vhdc= CreateCompatibleDC( hdc );
if(!vhdc)throw "error vhdc";
SelectObject( vhdc, hbmp );
TextOut( vhdc, 0, 0, L"TEST", 4 );
但在那之后,buf 仍然是空的。我需要它用于介绍 64KB,所以我不能使用大型库。
这是我尝试过的另一个不起作用的代码:
unsigned* buf= new unsigned [w*h];
for( int a=0;a<w*h;a++)buf[a]= 0x0;
HDC vhdc= CreateCompatibleDC( hdc ); if(!vhdc)throw "vhdc is hard";
HBITMAP hbmp= CreateCompatibleBitmap( hdc, w, h );
BITMAPINFO bmi = {{sizeof(BITMAPINFOHEADER),w,-h,1,32,BI_RGB,0,0,0,0,0},{0,0,0,0}};
SelectObject( vhdc, hbmp );
TextOut( vhdc, 0, 0, L"TEST", 4 );
BITMAPINFO bmpi;
ZeroMemory( &bmpi, sizeof(bmpi) );
//GetDIBits(vhdc, hbmp, 0, h, buf, &bmpi, NULL);
GetDIBits(vhdc, hbmp, 0, h, buf, &bmpi, BI_RGB);
我使用 vhdc 和 hdc 作为 GetDIBits 参数,它不起作用。
> jlahd 已经回答了这个问题。但是我会发布工作代码,以防有人需要它。
HDC hdc= GetDC( g_hWnd ); /// g_hWnd is my windows handle type HWND
int w= 1024;
int h= 768;
unsigned* buf= new unsigned [w*h];
HDC vhdc= CreateCompatibleDC( hdc ); if(!vhdc)throw "error with vhdc";
HBITMAP hbmp= CreateCompatibleBitmap( hdc, w, h );
BITMAPINFO bmpi = {{sizeof(BITMAPINFOHEADER),w,-h,1,32,BI_RGB,0,0,0,0,0},{0,0,0,0}};
SelectObject( vhdc, hbmp );
TextOut( vhdc, 10, 10, L"HELLO WORLD", 11 );
GetDIBits(vhdc, hbmp, 0, h, buf, &bmpi, BI_RGB);
之后,代码buf存储带有图像的数据,上面绘制了"HELLO WORLD"。
CreateBitmap
仅使用给定的数据作为输入。缓冲区在缓冲区上绘制时不会更新。您应该改用CreateDIBSection
。
相关文章:
- 使用 swig 追加到字节数组
- GDI 绘制到外部窗口 (C++)
- OpenGL ES 2.0将纹理绘制到屏幕上是行不通的
- Ascii .txt文件到字节数组 - C++
- 将 CByteArray 复制到字节数组中会导致访问冲突
- 将HICON / HCURSOR复制到字节数组中
- 将 QImage 保存到字节数组
- 如何将数据复制到字节数组的某些部分
- 将数据流到字节数组中
- 如何将任何值转换为字节数组并将其附加到字节列表
- 如何绘制到目标纹理大于屏幕分辨率的帧缓冲区
- SFML 将形状绘制到屏幕上的多个位置
- 以C++(Arduino)为单位比较指针到字节
- 如何在调用函数时将对象绘制到 sfml 窗口上
- 如何将成员从类绘制到窗口 c++ 上
- C++BigInteger到字节数组
- 从套接字到字节数组的读取数据中的意外字符
- C++结构到字节*引发错误
- 有没有办法将 EGL 绘制到 /dev/fb1 而不是 /dev/fb0,而无需在树莓派上复制数据
- 如何使用 WinAPI 将文本绘制到字节数组