Qt Graphics:QImage 的绘画非常像素化
Qt Graphics: the painting of a QImage is very pixelated
我正在使用 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 文件。
我尝试过的(没有成功):
- 使用 svg 文件
- 使用
QPixmap
代替 QImage
QPainter::RenderHint(QPainter::Antialiasing)
QPainter::RenderHint(QPainter::SmoothPixmapTransform)
如何让我的照片像第二张截图那样流畅?
如果您愿意使用 SVG,可以使用以下方法:
在你的 .pro-File: QT += core gui svg
header
#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中设置Antialiasing,然后所有项目都会生效:QGraphicsView::setRenderHint(QPainter::Antialiasing)
我通过在绘画前调整到我的图块大小设法解决了这个问题。此处有更多详细信息:Qt resize image with best quality
我正在使用 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 文件。 我尝试过的(没有成功):
- 使用 svg 文件
- 使用
QPixmap
代替QImage
QPainter::RenderHint(QPainter::Antialiasing)
QPainter::RenderHint(QPainter::SmoothPixmapTransform)
如何让我的照片像第二张截图那样流畅?
如果您愿意使用 SVG,可以使用以下方法: 在你的 .pro-File: QT += core gui svg
header
#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中设置Antialiasing,然后所有项目都会生效:QGraphicsView::setRenderHint(QPainter::Antialiasing)
我通过在绘画前调整到我的图块大小设法解决了这个问题。此处有更多详细信息:Qt resize image with best quality