c++ - MFC GDI+ 文本渲染问题
问题描述
我目前正在使用 5MP 相机,因此我将 BYTE* 转换为 GDI+ Bitmap 对象并使用 Graphics 对象在图片控件上绘制(所有 GDI+ 对象)
我想在上面画一个字符串,当我这样做时,分辨率(质量或其他)变得奇怪。这是图像。
这是原始图像
这是上面有文字的图像
这是我的代码。它使用 MFC 的 WM_MOUSEMOVE。当鼠标指针到达 CRect(dispRC[array]) 时,它会在 Bitmap 对象上呈现字符串“aa”。
当我这样做时,图像质量会降低,或者我不完全知道它会改变图像。(您可能不会注意到,因为这些是捕获的图像,但后一个图像的质量会降低。)
void CSmall_StudioDlg::OnMouseMove(UINT nFlags, CPoint point)
{
CPoint insidePoint;
// MAXCAM is the number of bitmap objects.
for (int i = 0; i < MAXCAM; i++)
{
// m_pBitmap[MAXCAM] is array of Bitmap* which contains address of Gdiplus::Bitmap objects.
if (m_pBitmap[i] != NULL)
{
// m_rcDisp[MAXCAM] are CRect objects which has information of picture control.
// i.e. GetDlgItem(IDC_BIN_DISP)->GetWindowRect(m_rcDisp[BINARY_VID]);
if (point.x > m_rcDisp[i].TopLeft().x && point.y > m_rcDisp[i].TopLeft().y)
{
if (point.x < m_rcDisp[i].BottomRight().x && point.y < m_rcDisp[i].BottomRight().y)
{
StringFormat SF;
insidePoint.x = point.x - m_rcDisp[i].TopLeft().x;
insidePoint.y = point.y - m_rcDisp[i].TopLeft().y;
Graphics textG(m_pBitmap[i]);
textG.SetTextRenderingHint(TextRenderingHintSingleBitPerPixel);
Gdiplus::Font F(L"Palatino Linotype Bold", 10, FontStyleBold, UnitPixel);
RectF R(insidePoint.x, insidePoint.y, 20, 100);
SF.SetAlignment(StringAlignmentCenter);
SF.SetLineAlignment(StringAlignmentCenter);
SolidBrush B(Color(0, 0, 0));
textG.DrawString(_T("aa"), -1, &F, R, &SF, &B);
// m_pGraphics[MAXCAM] is made like this
// i.e.
// static CClientDC roiDc(GetDlgItem(IDC_ROI_DISP));
// m_hDC[ROI_VID] = roiDc.GetSafeHdc();
// m_pGraphics[ROI_VID] = Graphics::FromHDC(m_hDC[ROI_VID]);
m_pGraphics[i]->DrawImage(m_pBitmap[i], 0, 0, m_vidwidth[i], m_vidheight[i]);
}
}
}
}
CDialogEx::OnMouseMove(nFlags, point);
}
希望我得到一个有用的答案。
谢谢!
解决方案
我遇到了类似的问题,并通过从 Windows 字体创建 GDI+ 字体来解决它,如下所示:
Gdiplus::Font font(hDc, hFont);
其中 hDc 是 DC 句柄, hFont 是字体句柄。
如果这有帮助,你可以试试吗?
推荐阅读
- c++ - Xerces C++ 方法将更新的 xml 写回字符串
- python - 如何并行运行机器人框架测试用例而不是并行测试套件?
- python - 在字典中搜索精确值
- c++ - Math::getGradeTotal(string continuegrade) 中的 while 循环给出错误
- javascript - 用css在滑块的中心插入图形
- sql - 使用 50 个并行 SQLPLUS 会话和 Bulk Collect LIMIT 和 FORALL 更新具有 500+ 百万条记录的表
- android - 如何更改输入反应本机的值
- python - Scrapy Mongodb 管道超时
- ironpython - Spotfire - 如何显示组合条堆叠条的标签 100%
- jasper-reports - 除了最后一次之外,如何详细打印每次迭代的文本?