我有一个 7589x5537 的大图像,我将它作为QPixmapGraphicsItem
.
如果我将其缩放QGraphicsView
到 14.2318 并将其旋转 -35 度,则像素图的渲染开始表现得很奇怪;撕裂或完全消失。
这也发生在其他旋转和比例上,但前提是它们的比例大于 14。
我已经阅读了有关 X11 限制的信息,但我使用的是 Windows。
我在 Qt 5.5
我已经测试了将图像的内容更改为树模式的桶填充,完全相同的行为。图像已编入索引,但使用 RGB 我有同样的问题。
任何人都知道为什么会发生这种情况以及如何解决它?问题可以重现吗?
这个问题似乎与 unsigned int 的最大值有关,如果不旋转,则与维度无关。创建一个 100 万 x 200 像素的无底图像,可以放大到 4384 倍。在我的计算机中,unsigned int 的大小为 4 个字节,它可以处理大约高达 40 亿的值。
我认为 Qt 在缩放之前不会将放大的图像裁剪到视图中,或者类似的东西。奇怪的是,它会撕裂它而不是崩溃耗尽资源,未能分配连续的内存或其他东西。
这些都是怀疑,因为目前我不知道 QGraphicsView 如何实现缩放。
#include <QtWidgets>
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
unsigned int w = 7589;
unsigned int h = 5537;
QImage image(w, h, QImage::Format_ARGB32);
for(unsigned int j = 0; j < h; j++)
{
for(unsigned int i = 0; i < w; i++)
{
QRgb rgb = qRgb(i%255,j%255,(i+j)%255);
image.setPixel(i, j, rgb);
}
}
QPixmap imagepm = QPixmap::fromImage(image);
QGraphicsPixmapItem* item = new QGraphicsPixmapItem(imagepm);
item->setTransformationMode(Qt::FastTransformation);
QGraphicsScene* scene = new QGraphicsScene;
scene->addItem(item);
QGraphicsView* view = new QGraphicsView(scene);
view->rotate(-35);
view->scale(14.2318,14.2318);
view->show();
return a.exec();
}