gpt4 book ai didi

c++ - 在位图上使用 DrawText() 时文本会旋转?

转载 作者:行者123 更新时间:2023-11-30 02:54:21 24 4
gpt4 key购买 nike

我想在 Bitmap 上绘制文本,我用下面的摘要代码完成了

BITMAPINFO bitmapInfo;
bitmapInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bitmapInfo.bmiHeader.biWidth = _imgWidth;
bitmapInfo.bmiHeader.biHeight = _imgHeight;
bitmapInfo.bmiHeader.biPlanes = 1;
bitmapInfo.bmiHeader.biBitCount = 24;
bitmapInfo.bmiHeader.biCompression = BI_RGB;
bitmapInfo.bmiHeader.biSizeImage = 0;

HDC hdc = GetDC(NULL);
if (hdc == NULL)
return false;

HFONT hFont = CreateFont( 50, 0, 0, 0, FW_BOLD, 0, 0, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, 0, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Arial" );
if(hFont == NULL)
return false;

HBITMAP hBitmap = CreateDIBitmap(hdc, (LPBITMAPINFOHEADER) &bitmapInfo.bmiHeader, CBM_INIT, _BRG24arrayIn, (LPBITMAPINFO) &bitmapInfo, DIB_RGB_COLORS);
if(hBitmap == NULL)
return false;

HDC hMemDC = CreateCompatibleDC(hdc);
if (hMemDC == NULL)
return false;

HBITMAP hBitmapOld = (HBITMAP)SelectObject(hMemDC, hBitmap);
if( hBitmapOld == NULL )
return false;

HFONT hFontOld = (HFONT)SelectObject(hMemDC, hFont);
if ( hFontOld == NULL )
return false;

SetBkMode(hMemDC, TRANSPARENT);
SetTextColor(hMemDC, 0x0000FF00);
RECT rect;
SetRect(&rect, 0, 0, _imgWidth, _imgHeight);

if (DrawText(hMemDC, "11:41:33", -1, &rect, DT_TOP|DT_LEFT) == 0)
return false;

GetDIBits(hdc, hBitmap, 0, _imgHeight, _BRG24arrayOut, (LPBITMAPINFO)&bitmapInfo, DIB_RGB_COLORS);
return true;

我要绘制的文本是"11:41:33",文本对齐方式是DT_TOP|DT_LEFT

但结果是文本被旋转并出现在左下角,如下图所示

enter image description here

输入数组 _BRG24arrayInBRG24 格式,有人能告诉我发生了什么吗?

非常感谢,

大统华!

最佳答案

您需要取反 BITMAPINFOHEADER 结构中的高度以获得自上而下的位图(即第 0 行位于顶部而不是底部的位图)。例如:

bitmapInfo.bmiHeader.biHeight = -_imgHeight;

关于c++ - 在位图上使用 DrawText() 时文本会旋转?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17132923/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com