我的程序使用复杂的规则创建图像,然后在QScrollArea中显示它。目前我这样做:
显示生成的图像是最简单的方法吗?
现在我遇到了问题。图像可能非常大。 QImage将数据存储在内存中,无法存储大图像。我想将生成的图像存储在磁盘上,并快速绘制任何缩放的任何部分。我怎么能这样做?
答案 0 :(得分:3)
您可能希望查看本文,介绍QPixmap
和QImage
之间的一些差异:
http://techbase.kde.org/Development/Tutorials/Graphics/Performance#QPixmap_vs._QImage
如果你想快速缩放非常大的图像,有一种方法,称为“深度缩放”和“Zoomable用户界面”(ZUI):
http://en.wikipedia.org/wiki/Deep_Zoom
QScrollArea
并非设计用于开箱即用。我不知道Qt实现,但我个人使用了一个名为OpenZoom的开源Flash。你可以看到我的结果:
http://hostilefork.com/2010/09/12/imagination-squared-plus-openzoom/
很高兴看到有人以可重复使用的方式为Qt解决这个问题。
答案 1 :(得分:1)
显示生成图像的最简单方法是将其分配给QLabel。使用QLabel::SetPixmap()
代替您自己的小部件。
我该怎么做......
首先,创建许多具有足够大尺寸(1024x1024甚至更小)的单独图像。
之后制作一个图像矩阵。您可以逐个读取和写入其图像。如果您需要显示图像的某些部分 - 只需从文件中读取所需的图像。
用于定位文件使用简单查找表,其中包含xId yId offset length
快速处理缩放 - 只需添加更多矩阵 - 下一个应该比基础小两倍,依此类推,直到你有一个单独的图像(对于最远的缩放)。