![](/img/trans.png)
[英]QPainter::drawImage() clips QImage when X, Y are not 0 on a QDeclarativeItem
[英]Painting with rotated QPainter clips to incorrect region of QImage
我有一个QImage代表一张空白的纸和一个QPainter,用于在此图像上绘画。 有时,我会在进行任何绘制操作之前旋转/平移QPainter,以便以“横向”方向绘制到此图像上。
这是代码的简化片段:
_image = new QImage(paperRect().size(), QImage::Format_RGB888);
_painter->begin(_image);
if (_orientation == QPrinter::Landscape)
{
_painter->translate(0, _image->height());
_painter->rotate(270);
}
// Painting operations here.
不幸的是,这没有按我预期的那样工作。 看来即使画家已旋转,它也没有意识到它可以在其中绘画的“新”边界,因此裁剪到“肖像”大小。
我尝试了以下操作,但无济于事:关闭剪辑( _painter->setClipping(false);
),设置新的剪辑rect( _painter->setClipRect(0, 0, _image.height(), _image.width());
),并以各种方式调整窗口和视口。
我浏览了QPainter和QImage的文档,并浏览了Internet,但是之前没有发现这个特殊问题。
事实证明,问题与我发布的代码无关。 这是我的解决方案,以防将来有人遇到此问题。
该问题最初是在自定义QPrintEngine / QPaintEngine类的实现期间发生的。 问题中发布的代码有效- 但是 ,当方向设置为“横向”时,我忘记更新QPrintEngine::property()
函数以返回与PPK_PageRect
和PPK_PaperRect
键对应的新尺寸。
需要注意的是QPrintEngine::metric()
函数似乎并不需要以这种方式进行更新(在我的项目)。 我假设这是因为在使用此QPrintEngine实现的QPrinter用作绘画设备时,主要使用metric
函数,而在我的项目中从来没有发生过。
在任何情况下,解决此问题都可以将QImage正确地绘制在“侧面”上。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.