我正在使用QPainter和QImage绘制游戏板,但是像素非常像素化,我不明白为什么。
像素板:
使用的实际图片:
代码:
图片部分的加载:
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文件。我尝试过的(没有成功):
QPixmap
代替QImage
QPainter::RenderHint(QPainter::Antialiasing)
QPainter::RenderHint(QPainter::SmoothPixmapTransform)
如何使我的图片看起来像第二个屏幕截图一样平滑?
如果您愿意使用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)
我设法通过在涂漆前调整为瓷砖的大小来解决该问题。此处有更多详细信息:Qt resize image with best quality