绘制缩放QImage时如何确保像素大小均匀?

时间:2017-10-08 11:36:53

标签: qt qgraphicsview qimage qpixmap

我有一个带有8x8像素的4通道png图像,由QImage加载。 QImage然后缩放200倍,因此图像的新分辨率为1600x1600,每个原始像素的大小为200x200。但是,当此图片通过QLabel添加到QPixmap并在屏幕上显示时,绘制的像素的大小会略有不同。

我使用Gimp拍摄了截图,并更仔细地查看了绘制的图像。似乎每隔一个像素稍微大一点,例如201而不是200像素宽。然后,行中的最后一个像素将更小以进行补偿,从而使整个图像最终具有正确的大小。

对于所有缩放因子都不会发生这种情况,例如100就可以了,因此功率为2的因子也是如此,例如256.

我原来的方法是使用QGraphicsViewQGraphicsPixmapItem,在这种情况下,我缩放了GraphicsItem而不是图像。效果是一样的。

我在这看到了什么影响?什么,如果有的话,可以做些什么呢?

重现此问题的代码非常简单

int scale = 200;
image = QImage("some image file");
QPixmap pixmap = QPixmap::fromImage(image.scaled(image.size() * scale));
some_label->setPixmap(pixmap);

1 个答案:

答案 0 :(得分:0)

对我的问题最简单的解决方案就是在QOpenGLWidget中使用QGraphicsView

setViewport(new QOpenGLWidget);

构造函数中的这一行在缩放图像时会产生更高的精度,但需要添加OpenGL作为依赖关系。 使用这种方法的另一个问题是,调用setViewport会使QGraphicsView上完成的许多设置无效。因此,如果视图是在UI文件中设置的,就像在我的情况下一样,请确保在调用setViewport之后调用其他setter

我找不到一个更好的解决方案,在没有OpenGL的情况下工作,当然还没有编写我自己的光栅化器。