gpt4 book ai didi

c++ - 用较小的 QPixMap 替换 QPixMap 的一部分

转载 作者:行者123 更新时间:2023-11-30 01:41:50 27 4
gpt4 key购买 nike

我是 Qt 和 Qt Graphics API 的新手。

我有一个较大的QPixMap和一个较小的QPixMap。我需要用较小的部分替换较大部分的一部分(QRect)。

我该如何实现这一目标?

谢谢。

更新

QPainter::drawPixmap() 不会更新 pImage->p_PixMap 表示的图像。

代码

class GraphicImage : public QObject,
public QGraphicsPixmapItem
{
Q_OBJECT

public:
GraphicImage(QPixmap* oImage,GraphiItemCtrl* pParent);
virtual ~GraphicImage(void);
QPixmap* p_PixMap;
};
- - - -
GraphicImage::GraphicImage(QPixmap* oImage,GraphiItemCtrl* pParent)
:QGraphicsPixmapItem(*oImage), p_Parent(pParent)
{
p_PixMap = oImage;
}
- - - -
void GraphiItemCtrl::SetImagePortion( QString sFileName, QRect rect, QPixmap pChildPixMap )
{
GraphicImage* pImage = map_CurrentImages[sFileName];

if ( !pImage )
return;

pChildPixMap.save("test.jpg");
QPixmap* pMap = pImage->p_PixMap;
QPainter pPainter(pMap);

pPainter.drawPixmap(rect, pChildPixMap);
qDebug() << rect.topLeft();
}

pChildPixMap.save("test.jpg"); 毫无问题地保存图像的所需部分。

注意:pImage继承自QObject和QGraphicsPixmapItem。pMap 不是 NULL

最佳答案

您正在寻找的功能是:

void QPainter::drawPixmap(const QRect &rectangle, const QPixmap &pixmap)

它将把像素图绘制到画家目标的矩形部分。

您可能还想使用这个:

void QPainter::drawPixmap(const QRect &target, const QPixmap &pixmap, const QRect &source)

这会将源的一部分绘制到目标的一部分中。

在这两种情况下,如果尺寸不匹配,图像将被缩放,因此,如果结果不佳,您还需要调整缩放方法。

成立于this answer ,设置 setRenderHint(QPainter::SmoothPixmapTransform); 本身似乎不会产生最佳结果。如果你想要最好的质量,你需要手动scale()像素图然后绘制它,这比绘画时动态缩放它产生更好的结果。

关于c++ - 用较小的 QPixMap 替换 QPixMap 的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40723651/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com