Qt 之 QImage

Qt 之 QImage,第1张

QImage 类提供了独立于硬件的图像表示形式,该图像表示形式可以直接访问像素数据,并且可以用作绘图设备。因为 QImage 是 QPaintDevice 子类,所以可以使用 QPainter 直接在图像上绘制。在 QImage 上使用 QPainter 时,可以在当前 GUI 线程以外的其他线程中执行绘制。

QImage 类支持 Format 枚举描述的几种图像格式。这些包括单色,8 位,32 位和 alpha 混合图像,可在所有 Qt 4x 版本中使用。

QImage 提供了一组函数,这些函数可用于获取有关图像的各种信息。还有一些函数可以实现图像变换。由于 QImage 类使用 implicit data sharing ,因此可以按值传递 QImage 对象。 QImage对象也可以流式传输和比较。

读取和写入的 *** 作与 QPixmap 相同。具体参考 Qt 之 QPixmap 。

QImage 提供了一组函数,这些函数可用于获取有关图像的各种信息:

用于处理图像像素的函数取决于图像格式。原因是单色和 8 位图像基于索引并使用颜色查找表,而 32 位图像直接存储 ARGB 值。有关图像格式的更多信息,请参见 Image Formats 部分。

对于32位图像,可以使用 setPixel() 函数将给定坐标处的像素颜色更改为指定为 ARGB 四联体的任何其他颜色。要生成合适的 QRgb 值,请使用 qRgb() (向给定的 RGB 值添加默认的 alpha 分量,即创建不透明的颜色)或 qRgba() 函数。 例如:

如果是8位和单色图像,则像素值只是图像颜色表中的索引。因此, setPixel() 函数只能用于将给定坐标处的像素颜色更改为图像颜色表中的预定义颜色,即只能更改像素的索引值。要将颜色更改或添加到图像的颜色表中,请使用 setColor() 函数。

颜色表中的一项是编码为QRgb值的ARGB四联体。使用 qRgb() 和 qRgba() 函数可以为 setColor() 函数使用一个合适的 QRgb 值。例如:

对于每个颜色通道超过8位的图像。 setPixelColor() 和 pixelColor() 方法可用于设置和获取 QColor 值。

QImage 还提供了 scanLine() 函数,该函数返回具有给定索引的扫描线处的像素数据的指针,而 bits() 函数,其返回指向第一个像素数据的指针(这等效于 scanLine(0) )。

QImage 中存储的每个像素都由整数表示。整数的大小取决于格式。 QImage 支持 Format 枚举描述的几种图像格式。

单色图像使用1位索引存储到最多具有两种颜色的颜色表中。单色图像有两种不同类型:大字节序(MSB优先)或小字节序(LSB优先)。

8位图像使用 8 位索引存储到颜色表中,即每个像素只有一个字节。颜色表是 QVector<QRgb> , QRgb typedef 等效于一个无符号整数,其中包含格式为 0xAARRGGBB 的 ARGB 四元组。

32位图像没有颜色表;相反,每个像素都包含一个QRgb值。分别存储RGB(即0xffRRGGBB),ARGB和预乘ARGB值的三种不同类型的32位图像。在预乘格式中,红色,绿色和蓝色通道乘以除以255的alpha分量。

可以使用 format() 函数检索图像的格式。使用 convertToFormat() 函数可将图像转换为另一种格式。 allGray() 和 isGrayscale() 函数说明是否可以安全地将彩色图像转换为灰度图像。

QImage支持许多用于创建新图像的功能,该图像是原始图像的转换版本: createAlphaMask() 函数从该图像的alpha缓冲区生成并返回一个1-bpp蒙版,而 createHeuristicMask() 函数创建并返回此图像的1-bpp启发式蒙版。后一种功能的工作方式是从一个角中选择一种颜色,然后从所有边缘开始切去该颜色的像素。

mirrored() 函数沿所需方向返回图像的镜像, scaled() 返回按比例缩放至所需度量的矩形的图像副本, rgbSwapped() 函数根据RGB图像构造BGR图像。

scaledToWidth() 和 scaledToHeight() 函数返回图像的缩放副本。

transformd() 函数返回使用给定的转换矩阵和转换模式转换的图像的副本:在内部,调整转换矩阵以补偿不必要的平移,即 transform() 返回包含图像所有转换点的最小图像。原始图像。静态 trueMatrix() 函数返回用于转换图像的实际矩阵。

构造具有给定 width , height 和 format 的图像。

如果无法分配内存,将返回 null 图像。

警告:这将创建一个具有未初始化数据的 QImage 。在使用 QPainter 绘制图像之前,调用 fill() 用适当的像素值填充图像。

构造具有给定 width , height 和 format 的图像,该图像使用现有的内存缓冲区 data 。 width , height 必须以像素为单位指定, data 必须是32位对齐的,并且图像中数据的每条扫描线也必须是32位对齐的。

缓冲区必须在 QImage 的整个生命周期内以及所有未修改或与原始缓冲区分离的副本中保持有效。映像不会删除销毁的缓冲区。您可以提供一个函数指针 cleanupFunction 以及一个额外的指针 cleanupInfo ,该指针将在销毁最后一个副本时被调用。

如果 format 是索引颜色格式,则图像颜色表最初为空,必须在使用图像之前使用 setColorCount() 或 setColorTable() 进行充分扩展。

构造具有给定宽度,高度和格式的图像,该图像使用现有的内存缓冲区 data 。宽度和高度必须以像素为单位指定。 bytesPerLine 指定每行的字节数(跨度)。

我用StretchBlt能够实现基本放大缩小功能,但是实现不了以鼠标中心缩放!

鼠标为中心缩放的意思是:鼠标放到加载到对话框内的上某一位置,向屏幕方向滚动鼠标的中轮,是以当前鼠标为中心放大或者缩小,假设鼠标指向某一个点,我希望不管我怎么滚动,鼠标指着的那个点一直保持不变,鼠标换一个位置后,也要这样

int width = labelwidth();

int height = labelheight();

QPicture pic("path");

picresize(width,height);

以上就是关于Qt 之 QImage全部的内容,包括:Qt 之 QImage、qt与opencv结合实现鼠标单击,图像以像素点放大怎么实现、请教:QT图片问题……等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9619672.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存