C++ 在QGraphicsView中平铺大型QGraphicsSitem

C++ 在QGraphicsView中平铺大型QGraphicsSitem,c++,image,image-processing,qt4,C++,Image,Image Processing,Qt4,我目前正在使用一个QGraphicsItem,我正在加载一个pixmap来显示一些光栅数据。我目前没有做任何平铺或类似的事情,但我已经覆盖了我的QGraphicsItem,这样我就可以实现一些功能,比如在鼠标下缩放、跟踪我悬停的像素等等 我的磁盘文件大小为1-2GB,我想找出一种更理想的显示方式。对于初学者来说——如果我想的话,我似乎可以一次显示它们——因为我使用的QImage(Qpixmap->QImage->QgraphicsItem)在任何超过32,xxx(16位)的像素索引上都会失败 那

我目前正在使用一个QGraphicsItem,我正在加载一个pixmap来显示一些光栅数据。我目前没有做任何平铺或类似的事情,但我已经覆盖了我的QGraphicsItem,这样我就可以实现一些功能,比如在鼠标下缩放、跟踪我悬停的像素等等

我的磁盘文件大小为1-2GB,我想找出一种更理想的显示方式。对于初学者来说——如果我想的话,我似乎可以一次显示它们——因为我使用的QImage(Qpixmap->QImage->QgraphicsItem)在任何超过32,xxx(16位)的像素索引上都会失败

那么,如果我想使用单个QGraphicsItem进行维护,我应该如何在这里实现平铺呢?我不想使用多个QGraphics站点来保存显示的数据+要显示的相邻数据“about”。这将需要我在用户鼠标移过并尝试缩放单个瓷砖时缩放所有瓷砖,从而导致我也必须重新定位所有瓷砖,对吗?我想这也需要了解从文件中准确获取哪些数据

然而,我对想法持开放态度。我还认为,以某种线程方式这样做会很好,这样用户可以继续平移图像或缩放,即使尚未加载所有分幅


我看了40000芯片的演示,但我不确定这是我想要的-它看起来基本上仍然像你通常在场景中一样显示所有的芯片,只是过度使用绘画方法来提供更少的细节……或者我错过了演示的某些内容?

处理如此大小的图像会有困难,这并不奇怪。Qt并不是为它而设计的,由于特定的操作系统和内存管理方式,可能还有其他因素

很明显,您需要(或至少应该使用)一个平铺机制。您的主要问题是,您需要一种访问图像数据的方法,而不需要使用
QImage
(或
QPixmap
)来加载整个内容并提供对该图像数据的访问,因为已经确定该方法失败

您可能需要找到一个方法(库),该方法可以将整个图像加载到内存中,并允许您从中提取图像数据区域,或者只从磁盘上的文件中加载特定区域。在尝试“缩小”图像的任何部分时,您还需要能够将非常大的区域调整为分辨率较低的部分。不幸的是,我从来没有这样做过图像处理,所以我不知道有哪些库选项可用,Qt可能无法直接帮助您


不过,您可能会探索一种方法,即使用图像编辑包将大型图像分割成更易于管理的块。然后,也许一个类似于芯片演示的
QGraphicsView
解决方案会起作用。

QGraphicsView会自动剔除你看不见的对象,因此使用大量的qgraphicsitem而不是一个庞大的qgraphicsitem肯定是更为理想的