在内存位图上TextOut文字(汉字) 用宋体之类输出到屏幕 锯齿明显 有什么好的方法消除这些问题? 如题!如果有类似的代码请发至[email protected]有什么好的方法也可以谈谈 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 选字体的时候选择TRUETYPE的字体,试试 两种可能性:1、直接往位图中写字;2、内存DC被StretchBlt到窗口DC。应该直接往窗口或兼容DC里输出文本,操作系统会优化字体边缘的。 我现在就是在兼容dc里边输出的 用字体“Arial”还好 一用“楷体之类的就不成了”!是缩放了,但比例不大!这个不行 我是给视频做了一个a叠加字幕 如果做好图片的话 就得在中间调用专业软件了 显然是不行的! drectX上不知道有没有反走样 或平滑显示之类的方法? 用GDI+,可以开启防锯齿功能Graphics graphic( dcMemory.GetSafeHdc() );// 设置防锯齿 graphic.SetTextRenderingHint(TextRenderingHintAntiAliasGridFit); Font myFont(L"宋体", static_cast<float>(6 * dMagnify) ,FontStyleBold );PointF origin( static_cast<float>(65 * dMagnify), 6.0f + y0 );SolidBrush blackBrush(Color(m_nOpacity, 255, 255, 255));// 输出文字CString strText;strText.Format( _T(" (%d%% free)"), nPercent );LPCWSTR lpcwString = T2W( diskInfo.strDiskName + strText); int nUnicodeLength = wcslen(lpcwString);int nANSILength = diskInfo.strDiskName.GetLength() + strText.GetLength();graphic.DrawString( lpcwString, wcslen(lpcwString), &myFont, origin, &blackBrush);大致的过程就是这样了 显然就是因为缩放操作引起的边缘锯齿,用下面的步骤来操作即可:用3个DC,一个是窗口DC,两个兼容DC(memdc1与窗口DC大小相同、memdc2任意大小)。在memdc2上处理需要的操作,但不要输出文字;把memdc2缩放贴图到memdc1上(StretchBlt);在memdc1上输出文字;把memdc1拷贝到窗口DC(BitBlt)。 to 9楼,GDI+的防锯齿功能在这种情况下也无能为力,一旦文本画进了DC,只要再把DC缩放贴到其它DC上还是会有锯齿。 晕 那么多类型转换 一个头二个大了!呵呵 开玩笑 我仔细看看 GDI+还没用过! to jameshooo 为什么要创建2个兼容DC呢?能给我讲解一下吗?谢谢先! 只要不缩放,你的字体将显示得很好。创建2个兼容DC的原因就是为了隔离图片和文字,因为图片需要缩放,但文字缩放后一定会失真(其实图片也会失真),所以把要缩放的内容放入一个DC,不缩放的内容放入另一个DC。 关于线程优先级问题 散分,非常重要问题求解决方案,要求有过成功实施方案的人参与,无经验者请不要乱说 如何将程序中的内容拖到资源管理器中? 如何编写程序读写USB,实现两台机之间的通信 CImageList的create函数的含义? 放分:来者有份.请各位提供编写程序时变量命名规则 金山毒霸2001里那种无边框的按钮是怎么做的? 是不是我问的问题太简单了,都没人理我,但是我确实不会。 ftgl绘制文字时,文字反过来了 internet编程问题!! wince下使用jrtplib库SendPacket函数的问题 谁能具体讲解一下网络心跳以及如何实现呢?
1、直接往位图中写字;
2、内存DC被StretchBlt到窗口DC。应该直接往窗口或兼容DC里输出文本,操作系统会优化字体边缘的。
我现在就是在兼容dc里边输出的 用字体“Arial”还好 一用“楷体之类的就不成了”!
是缩放了,但比例不大!
这个不行 我是给视频做了一个a叠加字幕 如果做好图片的话 就得在中间调用专业软件了 显然是不行的!
graphic.SetTextRenderingHint(TextRenderingHintAntiAliasGridFit); Font myFont(L"宋体", static_cast<float>(6 * dMagnify) ,FontStyleBold );
PointF origin( static_cast<float>(65 * dMagnify), 6.0f + y0 );
SolidBrush blackBrush(Color(m_nOpacity, 255, 255, 255));// 输出文字
CString strText;
strText.Format( _T(" (%d%% free)"), nPercent );
LPCWSTR lpcwString = T2W( diskInfo.strDiskName + strText);
int nUnicodeLength = wcslen(lpcwString);
int nANSILength = diskInfo.strDiskName.GetLength() + strText.GetLength();
graphic.DrawString( lpcwString, wcslen(lpcwString), &myFont, origin, &blackBrush);大致的过程就是这样了
在memdc2上处理需要的操作,但不要输出文字;
把memdc2缩放贴图到memdc1上(StretchBlt);
在memdc1上输出文字;
把memdc1拷贝到窗口DC(BitBlt)。
为什么要创建2个兼容DC呢?能给我讲解一下吗?谢谢先!