在位图上使用 DrawText() 时文本旋转?
Posted
技术标签:
【中文标题】在位图上使用 DrawText() 时文本旋转?【英文标题】:Text is rotated when use DrawText() on Bitmap? 【发布时间】:2013-06-16 11:40:15 【问题描述】:我想在 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
但结果是文本被旋转并出现在左下角,如下图所示
输入数组_BRG24arrayIn
是BRG24
格式,有人能告诉我发生了什么吗?
非常感谢,
T&T集团!
【问题讨论】:
它不是旋转的,是倒置的。这往往发生在位图上,它们通常与位图开头的最后一个扫描线反转存储。目前尚不清楚您在这段代码之后做了什么使该实现细节可见。使用 GDI+ 是避免此类事故的更好捕鼠器。 感谢汉斯帕桑特!很多人用这个代码在位图上画文字,我还没找到遇到这个问题的人,你能告诉我如何在不使用GDI+的情况下修复这个代码吗? 我不知道它是否需要修复,我认为你在这段代码之后做错了什么。就像您显示或保存它的方式一样。我也不会编写这样的代码,GDI+ 更容易方式。所以不,我不能给你看。 【参考方案1】:您需要取反 BITMAPINFOHEADER
结构中的高度以获得自上而下的位图(即第 0 行位于顶部而不是底部的位图)。例如:
bitmapInfo.bmiHeader.biHeight = -_imgHeight;
【讨论】:
以上是关于在位图上使用 DrawText() 时文本旋转?的主要内容,如果未能解决你的问题,请参考以下文章