Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 在Qt上构建并绘制大图像_Image_Qt_Draw_Deepzoom - Fatal编程技术网

Image 在Qt上构建并绘制大图像

Image 在Qt上构建并绘制大图像,image,qt,draw,deepzoom,Image,Qt,Draw,Deepzoom,我的程序使用复杂的规则创建图像,然后在QScrollArea中显示它。目前我是这样做的: 创建QImage 使用QImage::setPixel填充它 将我的小部件(源自QWidget)添加到QScrollArea 在小部件中定义paintEvent并使用QPaint::drawImage 这是显示生成图像的最简单方式吗 现在我有一个问题。图像可能非常大。QImage将数据存储在内存中,无法存储大图像。我想将生成的图像存储在磁盘上,并用任何缩放快速绘制其中的任何部分。如何实现这一点?显示生成

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

  • 创建QImage
  • 使用QImage::setPixel填充它
  • 将我的小部件(源自QWidget)添加到QScrollArea
  • 在小部件中定义paintEvent并使用QPaint::drawImage
这是显示生成图像的最简单方式吗


现在我有一个问题。图像可能非常大。QImage将数据存储在内存中,无法存储大图像。我想将生成的图像存储在磁盘上,并用任何缩放快速绘制其中的任何部分。如何实现这一点?

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

我该怎么做那个任务

首先,创建许多大小足够大的独立图像(1024x1024,甚至更小)

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

要在文件中定位,请使用简单查找表,其中包含
xId yId offset length


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

您可能想查看这篇文章,其中描述了
QPixmap
QImage
之间的一些差异:

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

QScrollArea
的设计初衷不是要做到这一点。我不知道Qt的实现,但就我个人而言,我玩的是一款开源的Flash。您可以看到我的结果:

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