2

我的程序使用复杂的规则创建图像,然后将其显示在 QScrollArea 中。目前我这样做:

  • 创建 QImage
  • 使用 QImage::setPixel 填充它
  • 将我的小部件(从 QWidget 派生)添加到 QScrollArea
  • 在小部件中定义 paintEvent 并使用 QPainter::drawImage

显示生成的图像是最简单的方法吗?

现在我有一个问题。图像可能非常大。QImage 将数据存储在内存中,不能存储大图像。我想将生成的图像存储在磁盘上,并以任何缩放快速绘制它的任何部分。我怎样才能做到这一点?

4

2 回答 2

3

QPixmap您可能想查看这篇文章,描述和之间的一些区别QImage

http://techbase.kde.org/Development/Tutorials/Graphics/Performance#QPixmap_vs._QImage

如果您想快速缩放非常大的图像,有一种方法,称为“深度缩放”和“可缩放用户界面”(ZUI):

http://en.wikipedia.org/wiki/Deep_Zoom

QScrollArea不是为开箱即用而设计的。我不知道 Qt 的实现,但我个人使用了一个名为OpenZoom的开源 Flash 。你可以看到我的结果:

http://hostilefork.com/2010/09/12/imagination-squared-plus-openzoom/

很高兴看到有人以可重用的方式为 Qt 解决这个问题。

于 2011-07-19T17:16:15.600 回答
1

显示生成图像的最简单方法是将其分配给 QLabel。使用QLabel::SetPixmap()而不是您自己的小部件。

我该怎么做这个任务...

首先,创建许多尺寸足够好的单独图像(1024x1024,甚至更小)。

之后制作该图像的矩阵。您可以将其图像逐个读取和写入文件。如果您需要显示图像的某些部分 - 只需从文件中读取所需的图像。

在文件中定位使用简单的查找表,字段如 xId yId offset length

要快速使用缩放 - 只需添加更多矩阵 - 下一个应该比基础小两倍,依此类推,直到剩下单个图像(用于最远缩放)。

于 2011-07-19T16:08:16.600 回答