我有一个带有8x8像素的4通道png图像,由QImage
加载。 QImage
然后缩放200倍,因此图像的新分辨率为1600x1600,每个原始像素的大小为200x200。但是,当此图片通过QLabel
添加到QPixmap
并在屏幕上显示时,绘制的像素的大小会略有不同。
我使用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);
答案 0 :(得分:0)
对我的问题最简单的解决方案就是在QOpenGLWidget
中使用QGraphicsView
:
setViewport(new QOpenGLWidget);
构造函数中的这一行在缩放图像时会产生更高的精度,但需要添加OpenGL
作为依赖关系。
使用这种方法的另一个问题是,调用setViewport
会使QGraphicsView
上完成的许多设置无效。因此,如果视图是在UI文件中设置的,就像在我的情况下一样,请确保在调用setViewport
之后调用其他setter 。
我找不到一个更好的解决方案,在没有OpenGL
的情况下工作,当然还没有编写我自己的光栅化器。