繁体   English   中英

使用旋转的QPainter绘画将剪辑裁剪到QImage的错误区域

[英]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_PageRectPPK_PaperRect键对应的新尺寸。

需要注意的是QPrintEngine::metric()函数似乎并不需要以这种方式进行更新(在我的项目)。 我假设这是因为在使用此QPrintEngine实现的QPrinter用作绘画设备时,主要使用metric函数,而在我的项目中从来没有发生过。

在任何情况下,解决此问题都可以将QImage正确地绘制在“侧面”上。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM