【发布时间】:2017-10-08 11:36:53
【问题描述】:
我有一个 8x8 像素的 4 通道 png 图像,由 QImage 加载。然后将QImage 缩放 200 倍,因此图像将具有 1600x1600 的新分辨率,每个原始像素的大小为 200x200。但是当这张图片通过QPixmap的方式添加到QLabel并显示在屏幕上时,绘制的像素大小会略有不同。
我已经用Gimp 截取了屏幕截图,并更仔细地查看了绘制的图像。似乎每个其他像素都比它应该的稍大,例如 201 而不是 200 像素宽。然后,一行中的最后一个像素将变小以进行补偿,从而使整个图像最终具有正确的大小。
并非所有比例因子都会发生这种情况,例如 100 即可,2 的幂因子也可以,例如 256。
我最初的方法是使用QGraphicsView 和QGraphicsPixmapItem,在这种情况下,我缩放了 GraphicsItem 而不是图像。效果是一样的。
我在这里看到了什么效果?如果有的话,可以做些什么呢?
重现此问题的代码非常简单
int scale = 200;
image = QImage("some image file");
QPixmap pixmap = QPixmap::fromImage(image.scaled(image.size() * scale));
some_label->setPixmap(pixmap);
【问题讨论】:
-
我不确定这是否能解决您的问题,但您可以在绘制(未缩放的)像素图时自己进行缩放,如下所示:github.com/gerbilvis/gerbil/blob/master/gui/widgets/… 缩放通过此处设置的 QTransform 进行: github.com/gerbilvis/gerbil/blob/master/gui/widgets/…(您的 QTransform 设置起来要简单得多,具有固定的比例和平移)顺便说一句。这是使用 GL 渲染后端的一种非常有效的方法。
-
谢谢。我永远不会猜到这个问题可能来自缩放算法。我认为这只是一个绘画/演示问题。但我只是将缩放后的图像保存到磁盘,果然,它也是错误的。感谢您的提示:)
标签: qt qgraphicsview qimage qpixmap