Image 在Qt上构建并绘制大图像
我的程序使用复杂的规则创建图像,然后在QScrollArea中显示它。目前我是这样做的:Image 在Qt上构建并绘制大图像,image,qt,draw,deepzoom,Image,Qt,Draw,Deepzoom,我的程序使用复杂的规则创建图像,然后在QScrollArea中显示它。目前我是这样做的: 创建QImage 使用QImage::setPixel填充它 将我的小部件(源自QWidget)添加到QScrollArea 在小部件中定义paintEvent并使用QPaint::drawImage 这是显示生成图像的最简单方式吗 现在我有一个问题。图像可能非常大。QImage将数据存储在内存中,无法存储大图像。我想将生成的图像存储在磁盘上,并用任何缩放快速绘制其中的任何部分。如何实现这一点?显示生成
- 创建QImage
- 使用QImage::setPixel填充它
- 将我的小部件(源自QWidget)添加到QScrollArea
- 在小部件中定义paintEvent并使用QPaint::drawImage
现在我有一个问题。图像可能非常大。QImage将数据存储在内存中,无法存储大图像。我想将生成的图像存储在磁盘上,并用任何缩放快速绘制其中的任何部分。如何实现这一点?显示生成图像的最简单方法是将其分配给QLabel。使用
QLabel::SetPixmap()
而不是您自己的小部件
我该怎么做那个任务
首先,创建许多大小足够大的独立图像(1024x1024,甚至更小)
之后,制作一个图像矩阵。您可以将其图像逐个读写到文件中。如果您需要显示图像的某些部分,只需从文件中读取所需的图像即可
要在文件中定位,请使用简单查找表,其中包含xId yId offset length
要使用快速缩放-只需添加更多矩阵-下一个矩阵应比基本矩阵小两倍,依此类推,直到剩下一个图像(用于最远的缩放)。您可能想查看这篇文章,其中描述了
QPixmap
和QImage
之间的一些差异:
如果您想快速缩放非常大的图像,有一种方法称为“深度缩放”和“可缩放用户界面”(ZUI):
QScrollArea
的设计初衷不是要做到这一点。我不知道Qt的实现,但就我个人而言,我玩的是一款开源的Flash。您可以看到我的结果:
很高兴看到有人以可重用的方式为Qt解决这个问题