Qt图形:QImage的绘画非常像素化

问题描述 投票:0回答:2

我正在使用QPainter和QImage绘制游戏板,但是像素非常像素化,我不明白为什么。

像素板:

“游戏板”

使用的实际图片:

Actual pics

代码:

图片部分的加载:

QImage desert_pic = QImage(":/images/graphics/pi.png");
c_mapicons.insert({type, desert_pic});  

绘画部分:

QRectF source(0.0, 0.0, 500.0, 500.0);
painter->drawImage(boundingRect(), c_mapicons.at(m_gameobject->getType()), source);  

图片为500x500 png文件。我尝试过的(没有成功):

  • 使用svg文件
  • 使用QPixmap代替QImage
  • QPainter::RenderHint(QPainter::Antialiasing)
  • QPainter::RenderHint(QPainter::SmoothPixmapTransform)

如何使我的图片看起来像第二个屏幕截图一样平滑?

qt pixel qpainter qimage qpixmap
2个回答
0
投票

如果您愿意使用SVG,可以使用以下方法:在您的.pro文件中:QT + = core gui svg

标题

#include <QtSvg>

class Board: public QGraphicsItem{

    public:

        Board();      
       ~Board();

        QRectF boundingRect() const override;
        void paint(QPainter *painter,
             const QStyleOptionGraphicsItem *option,
             QWidget *widget = nullptr) override;

        QGraphicsSvgItem *item;


};

cpp

Board::Board(){

    item = new QGraphicsSvgItem("folder/icon.svg");
    item->setParentItem(this);
    item-> ... /// set Pos() and so on here

}

您也可以在QGraphicsView中设置抗锯齿,然后所有项目都会生效:QGraphicsView :: setRenderHint(QPainter :: Antialiasing)


0
投票

我设法通过在涂漆前调整为瓷砖的大小来解决该问题。此处有更多详细信息:Qt resize image with best quality

© www.soinside.com 2019 - 2024. All rights reserved.