我有一个7589x5537的大图像,我把它放在一个场景中作为QPixmapGraphicsItem
。
如果我将QGraphicsView
缩放到14.2318并将其旋转-35度,则像素图的渲染开始表现得很奇怪;撕裂或完全消失。
这种情况也发生在其他轮换和尺度上,但前提是它们的比例大于14。
我已经了解了X11的限制,但我在Windows上。
我在Qt 5.5上
我已经测试过将图像内容更改为树形图案的桶装填充,完全相同的行为。图像被编入索引,但是使用RGB我有同样的问题。
任何人都知道为什么会发生这种情况以及如何解决这个问题?问题是否可重现?
该问题似乎与unsigned int的最大值有关,如果不旋转则与维度无关。创建一个100万乘200像素的图像,可以缩放到4384x。在我的计算机中,unsigned int的大小是4个字节,可以处理大约4000万的值。
我认为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();
}
答案 0 :(得分:0)
修复需要将图像切割成图块,将它们分组到单个父项下,然后按照之前的步骤进行处理。磁贴将是一个您不必担心的实现细节。