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



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

我用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);

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

setViewport(new QOpenGLWidget);

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

我找不到一个更好的解决方案,如果没有OpenGL,当然除了写我自己的光栅化器。

最新更新