首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QPainter::旋转禁用绘制文本的反混叠

QPainter::旋转禁用绘制文本的反混叠
EN

Stack Overflow用户
提问于 2011-11-03 13:28:08
回答 2查看 2.9K关注 0票数 8

我使用QPainter::setRenderHint(QPainter::Antialiasing, true)告诉Qt,我希望它可以反别名我所做的任何绘图(在本例中,是用drawText()绘制的文本)。

这很好,文本看起来很好,直到我想旋转我正在绘制的像素地图。

代码语言:javascript
复制
Painter.translate(0, height());
Painter.rotate(-90);

(逆时针方向旋转QPainter 90度并将其带回视野)

rotate()的调用似乎禁用了任何绘制的文本的反混叠--文本是以正确的旋转绘制的,但没有反混叠。其他事情似乎没有受到影响--例如,drawLine()仍然画了一条很好的反别名线。

知道我做错什么了吗?

编辑:不出所料,将文本添加到路径中,然后填充该路径,就会给出反别名、旋转的文本。不过,如果可能的话,我宁愿避开这条路线。

编辑(再次):我尝试在我使用的字体上使用QFont::setStyleStrategy(QFont::PreferAntialias),但没有效果。然而,一些更多的实验表明,像Arial这样的基本字体在旋转时仍然会产生反别名的文本,而我的自定义字体(Swiss721 BlkCn BT,适用于任何感兴趣的人)则不会。此外,虽然Windows 7上存在此问题,但在Ubuntu上运行时,我不存在相同的问题。这篇FAQ文章似乎暗示Qt希望主机操作系统来处理字体反别名,那么在处理这个特定字体的呈现时(这是一个TrueType,就像TrueType),会有什么样的问题呢?

编辑(上一次,我保证):将字体大小提高到16 or或更高可以解决问题。问题似乎是将我的特定字体呈现在16 It以下--也许与上面的博客文章中提到的内容有关?

在Windows 2000上,字体通常不会在一定范围内被反别名(比如大小为8-16),从而使文本更加清晰和可读性更强。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-03 19:14:40

我最近确实有机会进入Qt代码的这一部分,我认为您所看到的行为与Qt中的以下两个bug有关:

如果我记得是正确的(不是100%),您实际上看到的是ClearType呈现在Windows上的丢失。当应用转换时,Qt以抛出ClearType信息的方式获取字形像素,因此事情看起来更复杂。

如果您想亲自查看代码,最有可能的地方是/src/gui/text/qfontengine_win.cpp。您也可以尝试关闭ClearType,看看它们是否相似。

票数 4
EN

Stack Overflow用户

发布于 2011-11-03 16:02:34

一个“猜测”与你的RenderHint有关。你在这里使用QPainter::Antialiasing。Docu:“表示引擎应该在可能的情况下消除原语的别名边。原语如行、直角等,试着用QPainter::TextAntialiasing代替。

注意: RenderHints是标志,所以您可以在需要时使用-或它们(听起来是这样的)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7995703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档