QImage类

QImage类提供了一个硬件无关的图像表示,允许直接访问像素数据,并可以用作绘图设备。更多信息...

头文件 #include <QImage>
CMakefind_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmakeQT += gui
继承 QPaintDevice

注意:本类中所有函数都是可重入的

公开类型

枚举Format { Format_Invalid, Format_Mono, Format_MonoLSB, Format_Indexed8, Format_RGB32, …, Format_RGBA32FPx4_Premultiplied }
枚举InvertMode { InvertRgb, InvertRgba }

公开函数

QImage()
QImage(const QSize &size, QImage::Format format)
QImage(int width, int height, QImage::Format format)
QImage(uchar *data, int width, int height, QImage::Format format, QImageCleanupFunction cleanupFunction = nullptr, void *cleanupInfo = nullptr)
QImage(const uchar *data, int width, int height, QImage::Format format, QImageCleanupFunction cleanupFunction = nullptr, void *cleanupInfo = nullptr)
QImage(uchar *data, int width, int height, qsizetype bytesPerLine, QImage::Format format, QImageCleanupFunction cleanupFunction = nullptr, void *cleanupInfo = nullptr)
QImage(const uchar *data, int width, int height, qsizetype bytesPerLine, QImage::Format format, QImageCleanupFunction cleanupFunction = nullptr, void *cleanupInfo = nullptr)
QImage(const char *const[] xpm)
QImage(const QString &fileName, const char *format = nullptr)
QImage(const QImage &image)
QImage(QImage &&other)
virtual~QImage()
boolallGray() const
voidapplyColorTransform(const QColorTransform &transform)
intbitPlaneCount() const
uchar *bits()
const uchar *bits() const
qsizetypebytesPerLine() const
qint64cacheKey() const
QRgbcolor(int i) const
intcolorCount() const
QColorSpacecolorSpace() const
QList<QRgb>colorTable() const
(自6.4起) QImagecolorTransformed(const QColorTransform &transform) const &
(自6.4起) QImagecolorTransformed(const QColorTransform &transform) &&
const uchar *constBits() const
const uchar *constScanLine(int i) const
voidconvertTo(QImage::Format format, Qt::ImageConversionFlags flags = Qt::AutoColor)
voidconvertToColorSpace(const QColorSpace &colorSpace)
QImageconvertToFormat(QImage::Format format, Qt::ImageConversionFlags flags = Qt::AutoColor) const &
QImageconvertToFormat(QImage::Format format, Qt::ImageConversionFlags flags = Qt::AutoColor) &&
QImageconvertToFormat(QImage::Format format, const QList<QRgb> &colorTable, Qt::ImageConversionFlags flags = Qt::AutoColor) const
(自6.0起) QImageconvertedTo(QImage::Format format, Qt::ImageConversionFlags flags = Qt::AutoColor) const &
(自6.0起) QImageconvertedTo(QImage::Format format, Qt::ImageConversionFlags flags = Qt::AutoColor) &&
QImageconvertedToColorSpace(const QColorSpace &colorSpace) const
QImagecopy(const QRect &rectangle = QRect()) const
QImagecopy(int x, int y, int width, int height) const
QImagecreateAlphaMask(Qt::ImageConversionFlags flags = Qt::AutoColor) const
QImagecreateHeuristicMask(bool clipTight = true) const
QImagecreateMaskFromColor(QRgb color, Qt::MaskMode mode = Qt::MaskInColor) const
intdepth() const
(自6.2起) QSizeFdeviceIndependentSize() const
qrealdevicePixelRatio() const
intdotsPerMeterX() const
intdotsPerMeterY() const
voidfill(uint pixelValue)
voidfill(const QColor &color)
voidfill(Qt::GlobalColor color)
QImage::Formatformat() const
boolhasAlphaChannel() const
intheight() const
voidinvertPixels(QImage::InvertMode mode = InvertRgb)
boolisGrayscale() const
boolisNull() const
boolload(const QString &fileName, const char *format = nullptr)
boolload(QIODevice *device, const char *format)
(自6.2起) boolloadFromData(QByteArrayView data, const char *format = nullptr)
boolloadFromData(const uchar *data, int len, const char *format = nullptr)
boolloadFromData(const QByteArray &data, const char *format = nullptr)
(自6.0起) voidmirror(bool horizontal = false, bool vertical = true)
QImagemirrored(bool horizontal = false, bool vertical = true) const &
QImagemirrored(bool horizontal = false, bool vertical = true) &&
QPointoffset() const
QRgbpixel(const QPoint &position) const
QRgbpixel(int x, int y) const
QColorpixelColor(const QPoint &position) const
QColorpixelColor(int x, int y) const
QPixelFormatpixelFormat() const
intpixelIndex(const QPoint &position) const
intpixelIndex(int x, int y) const
QRectrect() const
boolreinterpretAsFormat(QImage::Format format)
(自6.0起) voidrgbSwap()
QImagergbSwapped() const &
QImagergbSwapped() &&
boolsave(const QString &fileName, const char *format = nullptr, int quality = -1) const
boolsave(QIODevice *device, const char *format = nullptr, int quality = -1) const
QImagescaled(const QSize &size, Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio, Qt::TransformationMode transformMode = Qt::FastTransformation) const
QImagescaled(int width, int height, Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio, Qt::TransformationMode transformMode = Qt::FastTransformation) const
QImagescaledToHeight(int height, Qt::TransformationMode mode = Qt::FastTransformation) const
QImagescaledToWidth(int width, Qt::TransformationMode mode = Qt::FastTransformation) const
uchar *scanLine(int i)
const uchar *scanLine(int i) const
voidsetAlphaChannel(const QImage &alphaChannel)
voidsetColor(int index, QRgb colorValue)
voidsetColorCount(int colorCount)
voidsetColorSpace(const QColorSpace &colorSpace)
voidsetColorTable(const QList<QRgb> &colors)
voidsetDevicePixelRatio(qreal scaleFactor)
voidsetDotsPerMeterX(int x)
voidsetDotsPerMeterY(int y)
voidsetOffset(const QPoint &offset)
voidsetPixel(const QPoint &position, uint index_or_rgb)
voidsetPixel(int x, int y, uint index_or_rgb)
voidsetPixelColor(const QPoint &position, const QColor &color)
voidsetPixelColor(int x, int y, const QColor &color)
voidsetText(const QString &key, const QString &text)
QSizesize() const
qsizetypesizeInBytes() const
voidswap(QImage &other)
QStringtext(const QString &key = QString()) const
QStringListtextKeys() const
CGImageReftoCGImage() const
(since 6.0) HBITMAPtoHBITMAP() const
(since 6.0) HICONtoHICON(const QImage &mask = {}) const
QImagetransformed(const QTransform &matrix, Qt::TransformationMode mode = Qt::FastTransformation) const
boolvalid(const QPoint &pos) const
bool有效(int x, int y) const
int宽度() const
QVariant转换为 QVariant() const
bool不等运算符 !=(const QImage &image) const
QImage &赋值运算符 =(const QImage &image)
QImage &赋值运算符 =(QImage &&other)
bool等运算符 ==(const QImage &image) const

静态公有成员

(自 6.2 版开始) QImage从数据(QByteArrayView data, const char *format = nullptr)
QImage从数据(const uchar *data, int size, const char *format = nullptr)
QImage从数据(const QByteArray &data, const char *format = nullptr)
(自6.0起) QImage从 HBITMAP(HBITMAP hbitmap)
(自6.0起) QImage从 HICON(HICON icon)
QImage::Format转换为图像格式(QPixelFormat format)
QPixelFormat转换为像素格式(QImage::Format format)
QTransform真实矩阵(const QTransform &matrix, int width, int height)
QImageCleanupFunction
QDataStream &left shift运算符 <<(QDataStream &stream, const QImage &image)
QDataStream &right shift运算符 >>(QDataStream &stream, QImage &image)

详细说明

Qt 提供了四个用于处理图像数据的类:QImage、QPixmapQBitmapQPicture。QImage 被设计和优化用于 I/O 操作,以及直接对像素进行访问和操作,而 QPixmap 被设计和优化用于在屏幕上显示图像。 QBitmap 只是一个便利类,继承自 QPixmap,确保深度为 1。最后,QPicture 类是一种可记录和回放 QPainter 命令的绘制设备。

由于 QImage 是 QPaintDevice 子类,可以使用 QPainter 直接在图像上绘制。当在 QImage 上使用 QPainter 时,绘图可以在与当前 GUI 线程不同的线程中执行。

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

QImage 提供了一组函数,用于获取有关图像的各种信息。还有几个函数用于图像的转换。

由于 QImage 类使用 隐式数据共享,QImage 对象可以通过值传递。QImage 对象还可以进行流操作和比较。

注意:如果您想在 Qt 的静态构建中加载 QImage 对象,请参阅 插件如何操作

警告:不支持以 QImage::Format/Indexed8 格式在 QImage 上进行绘制。

读取和写入图像文件

QImage提供了加载图像文件的多种方式:可以在构造QImage对象时加载文件,或者稍后通过使用load()或loadFromData()函数来加载。QImage还提供了静态的fromData()函数,可以从给定数据中构造一个QImage。加载图像时,文件名可以指代磁盘上的实际文件,也可以指代应用程序的嵌入式资源。有关如何在应用程序的可执行文件中嵌入图像和其他资源文件的详细信息,请参阅Qt资源系统概览。

只需调用save()函数即可保存QImage对象。

支持的完整文件格式列表可通过QImageReader::supportedImageFormats()和QImageWriter::supportedImageFormats()函数获得。可以通过插件添加新的文件格式。默认情况下,Qt支持以下格式

格式说明Qt的支持
BMPWindows位图读写
GIF图形交换格式(可选)
JPG联合照片专家组读写
JPEG联合照片专家组读写
PNG便携式网络图形读写
PBM便携式位图
PGM便携式灰度图
PPM便携式图像文件读写
XBMX11位图读写
XPMX11图像文件读写

图像信息

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

可用函数
几何形状函数size()、width()、height()、dotsPerMeterX()和dotsPerMeterY()提供了有关图像大小和宽高比的信息。

函数rect()返回图像的包围矩形。函数valid()会告诉给定的坐标对是否在这个矩形内。函数offset()返回图像相对于其他图像定位时预期的像素偏移量,这也可以通过setOffset()函数来操作。

颜色可以通过将像素坐标传递给pixel()函数来检索像素的颜色。函数pixel()将颜色作为独立于图像格式的QRgb值返回。

对于单色和8位图像,函数colorCount()和colorTable()提供了有关用于存储图像数据的颜色组件的信息:函数colorTable()返回图像的整个颜色表。为了获取单个条目,请使用pixelIndex()函数获取给定坐标对的像素索引,然后使用color()函数来获取颜色。请注意,如果您手动创建8位图像,您还必须在图像上设置一个有效的颜色表。

函数hasAlphaChannel()会告诉图像的格式是否尊重Alpha通道。函数allGray()和isGrayscale()会告知图像的颜色是否为灰度的各种阴影。

另请参阅像素操作图像变换部分。

文本text()函数返回与特定文本键关联的图像文本。可以使用textKeys()函数获取图像的文本键。使用setText()函数来修改图像的文本。
底层信息depth()函数返回图像的深度。支持的深度有:1位(单色)、8位、16位、24位和32位。bitPlaneCount()函数描述了这些位中有多少被使用。有关更多信息,请参阅图像格式部分。

format()、bytesPerLine()和sizeInBytes()函数提供了关于图像中存储数据的底层信息。

cacheKey()函数返回一个数字,该数字唯一标识QImage对象的内 容。

像素操作

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

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

32位
QImage image(3, 3, QImage::Format_RGB32);
QRgb value;

value = qRgb(189, 149, 39); // 0xffbd9527
image.setPixel(1, 1, value);

value = qRgb(122, 163, 39); // 0xff7aa327
image.setPixel(0, 1, value);
image.setPixel(1, 0, value);

value = qRgb(237, 187, 51); // 0xffedba31
image.setPixel(2, 1, value);

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

颜色表中的条目是一个编码为QRgb值的ARGB四元组。使用qRgb()和qRgba()函数创建用于与setColor()函数一起使用的合适的QRgb值。例如:

8位
QImage image(3, 3, QImage::Format_Indexed8);
QRgb value;

value = qRgb(122, 163, 39); // 0xff7aa327
image.setColor(0, value);

value = qRgb(237, 187, 51); // 0xffedba31
image.setColor(1, value);

value = qRgb(189, 149, 39); // 0xffbd9527
image.setColor(2, value);

image.setPixel(0, 1, 0);
image.setPixel(1, 0, 0);
image.setPixel(1, 1, 2);
image.setPixel(2, 1, 1);

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

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

图像格式

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

单色图像使用最多两种颜色的颜色表的1位索引进行存储。单色图像有两种不同的类型:大端(MSB先)和小端(LSB先)位顺序。

8位图像使用8位索引存储到颜色表中,即每个像素使用一个字节。颜色表是一个QList<QRgb>,其中QRgb类型定义等价于包含ARGB四联体格式的无符号整型0xAARRGGBB。

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

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

图像变换

QImage支持多个函数来创建一个新图像,它是原始图像的变换版本:函数createAlphaMask()使用此图像中的alpha缓冲区构建并返回一个1-bpp掩码,函数createHeuristicMask()为此图像创建并返回一个1-bpp启发式掩码。后一函数通过从其中一个角选择一种颜色,然后从所有边缘起移除该颜色像素来实现。

mirrored()函数返回一个在所需方向上的图像镜像,scaled()返回一个按所需尺寸缩放的图像副本,而函数rgbSwapped()则从RGB图像构建BGR图像。

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

函数transformed()返回一个经过给定变换矩阵和变换模式变换的图像副本:内部,变换矩阵被调整以补偿不需要的平移,即transformed()返回包含原始图像所有变换点的最小图像。静态函数trueMatrix()返回用于变换图像的实际矩阵。

还有更改图像属性的功能

函数说明
setDotsPerMeterX()通过设置物理米中水平贴合的像素数来定义纵横比。
setDotsPerMeterY()通过设置物理米中垂直贴合的像素数来定义纵横比。
fill()使用给定的像素值填充整个图像。
invertPixels()使用给定的InvertMode值反转图像中的所有像素值。
setColorTable()设置用于转换颜色索引的颜色表。仅限单色和8位格式。
setColorCount()重新大小颜色表。仅限单色和8位格式。

另请参阅QImageReaderQImageWriterQPixmapQSvgRenderer图像合成示例手绘示例

成员类型文档

枚举QImage::Format

Qt提供以下图像格式。表格之后的注释。

常量说明
QImage::Format_Invalid0图像无效。
QImage::Format_Mono1图像以每像素1位存储。字节以最高有效位(MSB)首先打包。
QImage::Format_MonoLSB2图像以每像素1位存储。字节以最低有效位(LSB)开头打包。
QImage::Format_Indexed83图像使用调色板索引存储,每个索引占用8位。
QImage::Format_RGB324图像使用32位RGB格式(0xffRRGGBB)存储。
QImage::Format_ARGB325图像使用32位ARGB格式(0xAARRGGBB)存储。
QImage::Format_ARGB32_Premultiplied6图像使用预乘的32位ARGB格式(0xAARRGGBB)存储,即红色、绿色和蓝色通道乘以除以255的alpha分量。如果RR、GG或BB的值高于alpha通道,结果将是未定义的。使用预乘ARGB32(如使用alpha混合的图像合成)与使用原始ARGB32相比,某些操作(例如)要快。
QImage::Format_RGB167图像使用16位RGB格式(5-6-5)存储。
QImage::Format_ARGB8565_Premultiplied8图像使用预乘的24位ARGB格式(8-5-6-5)存储。
QImage::Format_RGB6669图像使用24位RGB格式(6-6-6)存储。未使用的最高有效位总是零。
QImage::Format_ARGB6666_Premultiplied10图像使用预乘的24位ARGB格式(6-6-6-6)存储。
QImage::Format_RGB55511图像使用16位RGB格式(5-5-5)存储。未使用的最高有效位总是零。
QImage::Format_ARGB8555_Premultiplied12图像使用预乘的24位ARGB格式(8-5-5-5)存储。
QImage::Format_RGB88813图像使用24位RGB格式(8-8-8)存储。
QImage::Format_RGB44414图像使用16位RGB格式(4-4-4)存储。未使用的位总是零。
QImage::Format_ARGB4444_Premultiplied15图像使用预乘的16位ARGB格式(4-4-4-4)存储。
QImage::Format_RGBX8888 (自Qt 5.2起)16图像使用32位字节序RGB(x)格式(8-8-8-8)存储。这与Format_RGBA8888相同,只是alpha必须总是255。
QImage::Format_RGBA8888 (自Qt 5.2起)17图像使用32位字节序RGBA格式(8-8-8-8)存储。与ARGB32不同,这是一个字节序格式,这意味着32位编码在大端和小端架构之间有所不同,分别为(0xRRGGBBAA)和(0xAABBGGRR)。在读取为字节0xRR、0xGG、0xBB、0xAA的情况下,任何架构上的颜色顺序都是相同的。
QImage::Format_RGBA8888_Premultiplied (自Qt 5.2起)18图像使用预乘的32位字节序RGBA格式(8-8-8-8)存储。
QImage::Format_BGR30 (自Qt 5.4起)19图像使用32位BGR格式(x-10-10-10)存储。
QImage::Format_A2BGR30_Premultiplied (自Qt 5.4起)20图像使用32位预乘ABGR格式(2-10-10-10)存储。
QImage::Format_RGB30 (自Qt 5.4起)21图像使用32位RGB格式(x-10-10-10)存储。
QImage::Format_A2RGB30_Premultiplied (自Qt 5.4起)22图像使用32位预乘ARGB格式(2-10-10-10)存储。
QImage::Format_Alpha8 (自Qt 5.5起)23图像使用仅包含8位alpha的格式存储。
QImage::Format_Grayscale8 (自Qt 5.5起)24图像使用8位灰度格式存储。
QImage::Format_Grayscale16 (自Qt 5.13起)28图像使用16位灰度格式存储。
QImage::Format_RGBX64 (自Qt 5.12起)25图像使用64位半字序RGB(x)格式(16-16-16-16)存储。这与Format_RGBA64相同,只是alpha必须总是65535。
QImage::Format_RGBA64 (自Qt 5.12起)26图像使用64位半字序RGBA格式(16-16-16-16)存储。
QImage::Format_RGBA64_Premultiplied (自Qt 5.12起)27图像使用预乘的64位半字序RGBA格式(16-16-16-16)存储。
QImage::Format_BGR888 (自Qt 5.14起)29图像使用24位BGR格式存储。
QImage::Format_RGBX16FPx4 (自Qt 6.2起)30图像使用四个16位半字浮点RGBx格式(16FP-16FP-16FP-16FP)进行存储。这与 Format_RGBA16FPx4 相同,但alpha必须始终为1.0。
QImage::Format_RGBA16FPx4(自Qt 6.2起)31图像使用四个16位半字浮点RGBA格式(16FP-16FP-16FP-16FP)进行存储。
QImage::Format_RGBA16FPx4_Premultiplied(自Qt 6.2起)32图像使用四个16位半字浮点RGBA格式(16FP-16FP-16FP-16FP)进行预乘存储。
QImage::Format_RGBX32FPx4(自Qt 6.2起)33图像使用四个32位浮点RGBx格式(32FP-32FP-32FP-32FP)进行存储。这与 Format_RGBA32FPx4 相同,但alpha必须始终为1.0。
QImage::Format_RGBA32FPx4(自Qt 6.2起)34图像使用四个32位浮点RGBA格式(32FP-32FP-32FP-32FP)进行存储。
QImage::Format_RGBA32FPx4_Premultiplied(自Qt 6.2起)35图像使用四个32位浮点RGBA格式(32FP-32FP-32FP-32FP)进行预乘存储。

注意:不支持将具有 QImage::Format_Indexed8 格式的 QImage 绘制到内部。

注意:使用 QPainter 尽量避免直接渲染到大多数这些格式。渲染最好优化到 Format_RGB32 和 Format_ARGB32_Premultiplied 格式,其次是 Format_RGB16、Format_RGBX8888、Format_RGBA8888_Premultiplied、Format_RGBX64 和 Format_RGBA64_Premultiplied 格式。

另请参阅:format() 和 convertToFormat

枚举 QImage::InvertMode

该枚举类型用于描述在 invertPixels() 函数中如何反转像素值。

常量说明
QImage::InvertRgb0仅反转RGB值,保留alpha通道不变。
QImage::InvertRgba1反转所有通道,包括alpha通道。

另请参阅:invertPixels

成员函数文档

QImage QImage::convertToFormat(QImage::Format format, Qt::ImageConversionFlags flags = Qt::AutoColor) &&

QImage QImage::convertToFormat(QImage::Format format, Qt::ImageConversionFlags flags = Qt::AutoColor) const &

返回给定 format 的图像副本。

指定的图像转换 flags 控制转换过程中如何处理图像数据。

另请参阅:convertTo() 和 Image Formats

[since 6.0] QImage QImage::convertedTo(QImage::Format format, Qt::ImageConversionFlags flags = Qt::AutoColor) &&

[since 6.0] QImage QImage::convertedTo(QImage::Format format, Qt::ImageConversionFlags flags = Qt::AutoColor) const &

返回给定 format 的图像副本。

指定的图像转换 flags 控制转换过程中如何处理图像数据。

此函数自 Qt 6.0 起被引入。

另请参阅:convertTo() 和 Image Formats

QImage QImage::mirrored(bool horizontal = false, bool vertical = true) &&

QImage QImage::mirrored(bool horizontal = false, bool vertical = true) const &

返回图像的镜像,镜像效果根据 horizontalvertical 是否设置为 true 或 false 在水平和/或垂直方向。

注意,原始图像不会被修改。

另请参阅 mirror() 和 图像变换

QImage QImage::rgbSwapped() &&

QImage QImage::rgbSwapped() const &

返回一个 QImage,其中所有像素的红色和蓝色分量的值已交换,实际上将 RGB 图像转换为 BGR 图像。

原始 QImage 不会被修改。

另请参阅 rgbSwap() 和 图像变换

[noexcept] QImage::QImage()

构造一个空图像。

另请参阅 isNull()。

QImage::QImage(const QSize &size, QImage::Format format)

使用指定的 sizeformat 构造图像。

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

警告:这将创建一个未初始化数据的 QImage。请在用 QPainter 绘制到它上面之前调用 fill() 以使用合适的像素值填充图像。

QImage::QImage(int width, int height, QImage::Format format)

使用指定的 widthheightformat 构造图像。

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

警告:这将创建一个未初始化数据的 QImage。请在用 QPainter 绘制到它上面之前调用 fill() 以使用合适的像素值填充图像。

QImage::QImage(uchar *data, int width, int height, QImage::Format format, QImageCleanupFunction cleanupFunction = nullptr, void *cleanupInfo = nullptr)

使用现有内存缓冲区 data 构建 widthheightformat 的图像。 widthheight 必须以像素为单位指定,data 必须是 32 位对齐的,并且图像中的每行数据也必须是 32 位对齐的。

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

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

QImage(const uchar *data, int width, int height, QImage::Format format, QImageCleanupFunction cleanupFunction = nullptr, void *cleanupInfo = nullptr)

使用给定的 widthheightformat 创建一个图像,该图像使用现有的只读内存缓冲区 data。宽度、高度必须以像素为单位指定,数据必须是32位对齐的,图像中的每个扫描线的数据也必须是32位对齐的。

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

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

与接收非const数据缓冲区的相似QImage构造函数不同,这个版本永远不会修改缓冲区的内容。例如,调用QImage::bits()将返回图像的深拷贝,而不是传递给构造函数的缓冲区。这允许从原始数据创建QImage,同时避免原始数据被更改的可能性。

QImage(uchar *data, int width, int height, QImage::Format format, QImageCleanupFunction cleanupFunction = nullptr, void *cleanupInfo = nullptr)

使用现有的内存缓冲区 data 创建具有给定 widthheightformat 的图像。必须以像素为单位指定宽度和高度。bytesPerLine 指定了每行的字节数(行步长)。

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

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

QImage(const uchar *data, int width, int height, QImage::Format format, QImageCleanupFunction cleanupFunction = nullptr, void *cleanupInfo = nullptr)

使用现有的内存缓冲区 data 创建具有给定 widthheightformat 的图像。必须以像素为单位指定宽度和高度。bytesPerLine 指定了每行的字节数(行步长)。

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

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

与接收非const数据缓冲区的相似QImage构造函数不同,这个版本永远不会修改缓冲区的内容。例如,调用QImage::bits()将返回图像的深拷贝,而不是传递给构造函数的缓冲区。这允许从原始数据创建QImage,同时避免原始数据被更改的可能性。

[显式构造函数] QImage(const char *const[] xpm)

从给定 xpm 图像创建图像。

确保图像是有效的XPM图像。错误会被默默地忽略。

请注意,通过使用不寻常的声明可以稍微挤压XPM变量

static const char * const start_xpm[] = {
    "16 15 8 1",
    "a c #cec6bd",
    // etc.
};

额外的const使得整个定义都是只读的,这稍微更有效率(例如,当代码在共享库中时)并允许将应用程序存储在ROM中。

[显式] QImage::QImage(const QString &fileName, const char *format = nullptr)

构造一个图像,并尝试从指定的fileName文件中加载图像。

加载器尝试使用指定的format读取图像。如果format未指定(这是默认值),则会根据文件的扩展名和头信息进行自动检测。有关详细信息,请参阅{QImageReader::setAutoDetectImageFormat()}{QImageReader}。

如果图像加载失败,此对象将是一个空图像。

文件名可以指磁盘上实际存在的文件,也可以指应用软件中嵌入的资源之一。关于如何在应用程序的可执行文件中嵌入图像和其他资源文件的详细信息,请参阅资源系统概述。

另请参阅isNull() 和 读写图像文件

QImage::QImage(const QImage &image)

构造给定的image的一个浅拷贝。

有关浅拷贝的更多信息,请参阅隐式数据共享文档。

另请参阅copy()。

[noexcept] QImage::QImage(QImage &&other)

移动构造一个QImage实例,使其指向other所指向的同一对象。

[虚拟 noexcept] QImage::~QImage()

销毁图像并进行清理。

bool QImage::allGray() const

如果图像中所有颜色都是灰度色调(即它们的红色、绿色和蓝色分量相等),则返回true;否则为false。

请注意,此函数对没有颜色表的图像较慢。

另请参阅isGrayscale()。

void QImage::applyColorTransform(const QColorTransform &transform)

将颜色变换transform应用到图像中的所有像素上。

int QImage::bitPlaneCount() const

返回图像中的位平面数。

位平面数是指每个像素的颜色和透明度信息的位数。这与图像格式包含未使用位时的深度不同(即更小)。

另请参阅depth()、format() 和 图像格式

uchar *QImage::bits()

返回指向第一个像素数据的指针。这等价于scanLine(0)。

请注意,QImage使用了隐式数据共享。此函数执行共享像素数据的深拷贝,从而确保此QImage是该返回值的唯一使用者。

另请参阅 scanLine(),sizeInBytes() 和 constBits()。

const uchar *QImage::bits() const

这是一个重载函数。

请注意,QImage使用<্implict data sharing(隐式数据共享),但此函数不会执行对共享像素数据的深度复制,因为返回的数据是const。

qsizetype QImage::bytesPerLine() const

返回每行图像的字节数。

如果在height()非零的情况下,等同于 sizeInBytes() / height()。

另请参阅 scanLine

qint64 QImage::cacheKey() const

返回一个数字,用于标识此QImage对象的内容。只有当不同的QImage对象引用相同的内容时,它们才能拥有相同的键。

当图像改变时,键会更改。

QRgb QImage::color(int i) const

返回颜色表中索引为i的颜色。第一个颜色在索引0。

图像的颜色表中的颜色指定为ARGB四联体(QRgb)。使用qAlpha(),qRed(),qGreenqBlue函数来获取颜色值的组成部分。

另请参阅setColorpixelIndex像素操作

int QImage::colorCount() const

返回图像颜色表的大小。

注意,对于32位图像,colorCount()返回0,因为这些图像不使用颜色表,而是将像素值编码为ARGB四联体。

另请参阅setColorCount图像信息

QColorSpace QImage::colorSpace() const

如果已定义颜色空间,则返回图像的颜色空间。

另请参阅setColorSpace

QList<QRgb> QImage::colorTable() const

返回图像颜色表中包含的颜色列表,如果没有颜色表返回空列表。

另请参阅setColorTablecolorCountcolor

[since 6.4] QImage QImage::colorTransformed(const QColorTransform &transform) const &

返回使用 变换 对图像中所有像素进行变换后的图像颜色。

此函数是在 Qt 6.4 中引入的。

另请参阅applyColorTransform()。

[自 6.4] QImage QImage::colorTransformed(const QColorTransform &transform) &&

这是一个重载函数。

返回使用 变换 对图像中所有像素进行变换后的图像颜色。

此函数是在 Qt 6.4 中引入的。

另请参阅applyColorTransform()。

const uchar *QImage::constBits() const

返回指向第一个像素数据的指针。

请注意,QImage使用<্implict data sharing(隐式数据共享),但此函数不会执行对共享像素数据的深度复制,因为返回的数据是const。

另请参阅bits() 和 constScanLine()。

const uchar *QImage::constScanLine(int i) const

返回指向索引 i 的扫描行中的像素数据的指针。第一个扫描行在索引 0。

扫描行数据至少为 32 位对齐。对于 64 位格式,它遵循 64 位整数的本地对齐(大多数平台为 64 位,但在 i386 上为 32 位)。

请注意,QImage使用<্implict data sharing(隐式数据共享),但此函数不会执行对共享像素数据的深度复制,因为返回的数据是const。

另请参阅scanLine() 和 constBits()。

void QImage::convertTo(QImage::Format format, Qt::ImageConversionFlags flags = Qt::AutoColor)

就地将图像转换为给定的 格式,如有必要则分离。

指定的图像转换 flags 控制转换过程中如何处理图像数据。

另请参阅convertedTo()。

void QImage::convertToColorSpace(const QColorSpace &colorSpace)

将图像转换为 colorSpace

如果图像没有有效的颜色空间,则方法不做任何操作。

另请参阅convertedToColorSpace() 和 setColorSpace()。

QImage QImage::convertToFormat(QImage::Format format, const QList<QRgb> &colorTable, Qt::ImageConversionFlags flags = Qt::AutoColor) const

这是一个重载函数。

返回图像的副本,并转换为给定的 格式,使用指定的 颜色表

从 RGB 格式到索引格式的转换是一个缓慢的操作,并且将使用简单的最近颜色方法,不进行抖动。

QImage QImage::convertedToColorSpace(const QColorSpace &colorSpace) const

返回转换为 颜色空间 的图像。

如果图像没有有效的颜色空间,则返回一个 null QImage

另请参阅convertToColorSpace()。

QImage QImage::copy(const QRect &rectangle = QRect()) const

返回图像的新区域作为新图像。

返回的图像是从本图像的(rectangle.x(), rectangle.y())位置处复制的,并始终具有给定rectangle的大小。

在此图像之外的区域内,像素将被设置为0。对于32位的RGB图像,这意味着黑色;对于32位的ARGB图像,这意味着透明黑色;对于8位图像,这意味着调色板中索引为0的颜色,可以是任何颜色;对于1位图像,这意味着Qt::color0

如果给定的rectangle是一个空矩形,则将复制整个图像。

另请参阅QImage

QImage QImage::copy(int x, int y, int width, int height) const

这是一个重载函数。

返回的图像是从本图像的( x, y)位置处复制的,并始终具有给定的widthheight。在此图像之外的区域内,像素将被设置为0。

QImage QImage::createAlphaMask(Qt::ImageConversionFlags flags = Qt::AutoColor) const

从本图像的alpha缓冲区中构建并返回一个1-bpp的蒙版。如果图像的格式是QImage::Format_RGB32,返回一个空图像。

flags参数是Qt::ImageConversionFlags的按位或组合,用于控制转换过程。传递0给标志设置所有默认选项。

返回的图像具有小端位序(即图像的格式是QImage::Format_MonoLSB),您可以使用convertToFormat()函数将其转换为大端序( QImage::Format_Mono)。

另请参阅createHeuristicMask() 和图像转换

QImage QImage::createHeuristicMask(bool clipTight = true) const

为本图像创建并返回一个1-bpp的启发式蒙版。

该函数通过从一个角落中选择一种颜色,然后从所有边缘开始移除该颜色的像素来完成。四个角落对要屏蔽的颜色进行投票。如果有平局(这通常意味着该函数不适用于该图像),结果将是任意的。

返回的图像具有小端位序(即图像的格式是QImage::Format_MonoLSB),您可以使用convertToFormat()函数将其转换为大端序( QImage::Format_Mono)。

如果clipTight为真(默认值),则蒙版的大小刚好足以覆盖像素;否则,蒙版将比数据像素大。

请注意,此函数不忽略alpha缓冲区。

另请参阅createAlphaMask() 和图像转换

QImage QImage::createMaskFromColor(QRgb color, Qt::MaskMode mode = Qt::MaskInColor) const

根据给定的color值创建并返回本图像的蒙版。如果mode是MaskInColor(默认值),则所有匹配的颜色像素在蒙版中将是不透明的。如果mode是MaskOutColor,则所有匹配的颜色像素在蒙版中将是不透明的。

另请参阅 createAlphaMask() 和 createHeuristicMask().

int QImage::depth() const

返回图像的深度。

图像深度是指存储单个像素使用的位数,也称为每像素位数(bpp)。

支持的深度值有 1、8、16、24、32 和 64。

另请参阅 bitPlaneCount(),convertToFormat(),图像格式图像信息

[自 6.2] QSizeF QImage::deviceIndependentSize() const

返回图像在设备独立像素中的大小。

在用户界面大小计算中使用图像大小时应使用此值。

返回值等价于 image.size() / image.devicePixelRatio()。

此函数在 Qt 6.2 中引入。

qreal QImage::devicePixelRatio() const

返回图像的设备像素比率。这是设备像素与设备独立像素之间的比率。

当根据图像大小计算布局几何时使用此函数:QSize 布局大小 = image.size() / image.devicePixelRatio()

默认值为 1.0。

另请参阅 setDevicePixelRatio() 和 QImageReader

int QImage::dotsPerMeterX() const

返回水平方向上在物理米中可以容纳的像素数。与 dotsPerMeterY 一起,这个数字定义了图像的预期缩放和宽高比。

另请参阅 setDotsPerMeterX() 和 图像信息

int QImage::dotsPerMeterY() const

返回垂直方向上在物理米中可以容纳的像素数。与 dotsPerMeterX 一起,这个数字定义了图像的预期缩放和宽高比。

另请参阅 setDotsPerMeterY() 和 图像信息

void QImage::fill(uint pixelValue)

使用给定的 pixelValue 填充整个图像。

如果此图像的深度为 1,则仅使用最低位。如果您说填充(0),填充(2) 等,则图像填充 0。如果你说填充(1),填充(3) 等,则图像填充 1。如果深度为 8,则使用最低 8 位,如果深度为 16 则使用最低 16 位。

如果图像深度高于 32 位,则结果未定义。

注意: 没有相应的值获取器,尽管 QImage::pixelIndex() 将返回索引格式的相同值,而对于 RGB32、ARGB32 和 ARGB32PM 格式,QImage::pixel() 将返回相同的值。

另请参阅 depth() 和 图像转换

void QImage::fill(const QColor &color)

这是一个重载函数。

用给定颜色填充整个图像。

如果图像深度为1,则当颜色等于Qt::color1时,图像将与1填充;否则为0。

如果图像深度为8,则当颜色表中有对应颜色时,图像将被相应索引填充;否则为0。

void QImage::fill(Qt::GlobalColor color)

这是一个重载函数。

使用标准全局颜色描述的给定颜色填充图像。

QImage::Format QImage::format() const

返回图像的格式。

参见图像格式

[静态, 自6.2以来] QImage QImage::fromData(QByteArrayView data, const char *format = nullptr)

从给定的QByteArrayView 数据构建图像。加载器尝试使用指定的格式读取图像。如果没有指定格式(默认情况),加载器将探测数据以猜测文件格式。

如果指定了格式,它必须是QImageReader::supportedImageFormats()返回的值之一。

如果图像加载失败,返回的图像将为空图像。

此函数在 Qt 6.2 中引入。

参见load(),save()和读取和写入图像文件

[静态] QImage QImage::fromData(const uchar *data, int size, const char *format = nullptr)

这是一个重载函数。

从给定的二进制数据的前大小个字节构建QImage

[静态] QImage QImage::fromData(const QByteArray &data, const char *format = nullptr)

这是一个重载函数。

从给定的QByteArray 数据构建QImage

[静态, 自6.0以来] QImage QImage::fromHBITMAP(HBITMAP hbitmap)

返回与给定hbitmap等效的QImage

HBITMAP不存储有关alpha通道的信息。

在标准情况下,alpha通道被忽略,并创建一个完全不透明的图像(通常格式为QImage::Format_RGB32)。

但是在某些情况下,例如对于应用图标或系统托盘图标,会使用alpha通道。在这种情况下,应在返回的图像上调用reinterpretAsFormat(QImage::Format_ARGB32)以确保格式正确。

此函数自 Qt 6.0 起被引入。

参见toHBITMAP()和reinterpretAsFormat

[静态,自6.0以来] QImage QImage::fromHICON(HICON icon)

返回一个与指定的 icon 等效的 QImage

此函数自 Qt 6.0 起被引入。

另请参阅 toHICON()。

bool QImage::hasAlphaChannel() const

如果图像具有支持alpha通道的格式,则返回 true,否则返回 false

另请参阅 图像信息

int QImage::height() const

返回图像的高度。

另请参阅 图像信息

void QImage::invertPixels(QImage::InvertMode mode = InvertRgb)

反转图像中的所有像素值。

所提供的反转 mode 只有在图像深度为32时才有意义。默认 modeInvertRgb,此时alpha通道保持不变。如果 modeInvertRgba,则alpha位也被反转。

反转8位图像意味着用颜色索引 255 - i 的像素替换颜色索引 的所有像素。对于1位图像也是如此。注意,颜色表不会被更改。

如果图像具有预乘的alpha通道,则首先将图像转换为未预乘的图像格式以进行反转,然后将其转换回来。

另请参阅 图像变换

bool QImage::isGrayscale() const

对于32位图像,此函数与 allGray() 等效。

对于索引彩色图像,如果颜色表中的所有颜色(i)都是 QRgb(i, i, i),则此函数返回 true,否则返回 false

另请参阅 allGray() 和 图像格式

bool QImage::isNull() const

如果是空图像,则返回 true,否则返回 false

空图像的所有参数都设置为0,且没有分配数据。

bool QImage::load(const QString &fileName, const char *format = nullptr)

从给定 fileName 的文件中加载图像。如果图像成功加载,则返回 true;否则使图像无效并返回 false

加载器尝试使用指定的 format 读取图像,例如PNG或JPG。如果没有指定 format(这是默认值),则根据文件的扩展名和标题自动检测。有关详细信息,请参阅 QImageReader::setAutoDetectImageFormat

文件名可以指磁盘上实际存在的文件,也可以指应用软件中嵌入的资源之一。关于如何在应用程序的可执行文件中嵌入图像和其他资源文件的详细信息,请参阅资源系统概述。

另请参阅 读取和写入图像文件

bool QImage::load(QIODevice *device, const char *format)

这是一个重载函数。

此函数从给定的 device 中读取一个 QImage。这可以用来直接将图像加载到 QByteArray 中。

[自6.2版本开始] bool QImage::loadFromData(QByteArrayView data, const char *format = nullptr)

从给定的 QByteArrayView data 加载图像。如果图像成功加载,则返回 true;否则使图像无效并返回 false

加载器尝试使用指定的 format 读取图像,例如 PNG 或 JPG。如果未指定 format(默认行为),则加载器会检查文件头以猜测文件格式。

此函数在 Qt 6.2 中引入。

另请参阅 读取和写入图像文件

bool QImage::loadFromData(const uchar *data, int len, const char *format = nullptr)

这是一个重载函数。

从给定的二进制 data 的前 len 字节加载图像。

bool QImage::loadFromData(const QByteArray &data, const char *format = nullptr)

这是一个重载函数。

从给定的 QByteArray data 加载图像。

[自6.0版本开始] void QImage::mirror(bool horizontal = false, bool vertical = true)

根据 horizontalvertical 是否设置为 true 或 false,在水平和/或垂直方向上镜像图像。

此函数自 Qt 6.0 起被引入。

另请参阅 mirrored() 和 图像变换

QPoint QImage::offset() const

返回图像在定位时相对其他图像偏移的像素数。

另请参阅 setOffset() 和 图像信息

QRgb QImage::pixel(const QPoint &position) const

返回给定 position 的像素颜色。

如果 position 不有效,结果未定义。

注意: 当用于大量的像素操作时,此函数非常昂贵。当需要读取许多像素时,使用 constBits() 或 constScanLine()。

另请参阅 setPixel(), valid(), constBits(), constScanLine(),和 像素操作

QRgb QImage::pixel(int x, int y) const

这是一个重载函数。

返回坐标 (x, y) 处的像素颜色。

QColor QImage::pixelColor(const QPoint &position) const

QColor 的形式返回给定 position 的像素颜色。

如果 position 不有效,则返回一个无效的 QColor

注意: 当用于大量的像素操作时,此函数非常昂贵。当需要读取许多像素时,使用 constBits() 或 constScanLine()。

另请参阅 setPixelColor(),setPixel(),valid(),constBits(),constScanLine(),以及 像素操作

QColor QImage::pixelColor(int xint y) const

这是一个重载函数。

返回坐标(xy)上的像素颜色,作为QColor

[noexcept] QPixelFormat QImage::pixelFormat() const

返回图像格式作为QPixelFormat

int QImage::pixelIndex(const QPoint &position) const

返回给定位置position的像素索引。

如果position无效,或者如果图像不是调色板图像(depth() > 8),结果将是未定义的。

另请参阅 valid(),depth(),和 像素操作

int QImage::pixelIndex(int xint y) const

这是一个重载函数。

返回点(xy)处的像素索引。

QRect QImage::rect() const

返回图像的包围矩形(0,0,width(),height())。

另请参阅 图像信息

bool QImage::reinterpretAsFormat(QImage::Format format)

不更改数据,将图像格式更改为format。仅在具有相同深度的格式之间操作。

如果成功,则返回 true

此函数可以用来将具有alpha通道的图像更改为相应的不透明格式,如果已知数据只包含不透明信息,或者更改一个给定图像缓冲区的格式,在用新数据覆盖之前。

警告: 该函数不会检查图像数据在新格式中是否有效,如果深度兼容,仍将返回true。对无效数据图像的操作是未定义的。

警告: 如果图像未分离,这将导致数据被复制。

另请参阅 hasAlphaChannel() 和 convertToFormat

[since 6.0] void QImage::rgbSwap()

交换所有像素的红色和蓝色组件的值,实际上将RGB图像转换为BGR图像。

此函数自 Qt 6.0 起被引入。

另请参阅 rgbSwapped() 和 图像转换

bool QImage::save(const QString &fileName,const char *format = nullptr,int quality = -1) const

将图像保存到指定名称的文件中,使用指定的图像文件格式和质量因子。如果formatnullptr,则QImage会尝试通过查看fileName的扩展名来猜测格式。

质量因子必须在0到100或-1之间。指定0可以获得较小的压缩文件,指定100可以获得较大的未压缩文件,默认-1(系统默认设置)。

如果图像成功保存,则返回true;否则返回false

另请参阅 读取和写入图像文件

bool QImage::save(QIODevice *device, const char *format = nullptr, int quality = -1) const

这是一个重载函数。

此函数将QImage写入到指定的device

例如,可以用此将图像直接保存为QByteArray

QImage image;
QByteArray ba;
QBuffer buffer(&ba);
buffer.open(QIODevice::WriteOnly);
image.save(&buffer, "PNG"); // writes image into ba in PNG format

QImage QImage::scaled(const QSize &size, Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio, Qt::TransformationMode transformMode = Qt::FastTransformation) const

返回图像的副本,该副本按照指定的sizeaspectRatioModetransformMode进行缩放。

  • 如果aspectRatioModeQt::IgnoreAspectRatio,则将图像缩放到size
  • 如果aspectRatioModeQt::KeepAspectRatio,则将图像缩放到一个尽可能大的矩形,但保留其宽高比。
  • 如果aspectRatioModeQt::KeepAspectRatioByExpanding,则将图像缩放到一个尽可能小的矩形,外部小于size,但保留其宽高比。

如果给定的size为空,则此函数返回空图像。

另请参阅isNull()和图像变换

QImage QImage::scaled(int width, int height, Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio, Qt::TransformationMode transformMode = Qt::FastTransformation) const

这是一个重载函数。

返回图像副本,使其宽度为给定的width和高度为给定的height,同时根据给定的aspectRatioModetransformMode进行缩放。

如果widthheight为零或负数,此函数将返回空图像。

QImage QuincyImage::scaledToHeight(int height, Qt::TransformationMode mode = Qt::FastTransformation) const

返回缩放后的图像副本。返回的图像将使用指定的变换mode缩放至给定的height

此函数会自动计算图像的宽度,以保持图像的宽高比。

如果给定的 高度 为 0 或负数,则返回一个空图像。

另请参阅 图像变换

QImage QImage::scaledToWidth(int 宽度, Qt::TransformationMode 模式 = Qt::FastTransformation) const

返回图像的缩放副本。返回的图像使用指定的 模式 缩放至给定的 宽度

这个函数会自动计算图像的高度以保持其纵横比。

如果给定的 宽度 为 0 或负数,则返回一个空图像。

另请参阅 图像变换

uchar *QImage::scanLine(int 行号)

返回指向索引 i 的扫描行中的像素数据的指针。第一个扫描行在索引 0。

扫描行数据至少为 32 位对齐。对于 64 位格式,它遵循 64 位整数的本地对齐(大多数平台为 64 位,但在 i386 上为 32 位)。

例如,要移除图像中每个像素的绿色分量

for (int y = 0; y < image.height(); ++y) {
    QRgb *line = reinterpret_cast<QRgb*>(image.scanLine(y));
    for (int x = 0; x < image.width(); ++x) {
        QRgb &rgb = line[x];
        rgb = qRgba(qRed(rgb), qGreen(0), qBlue(rgb), qAlpha(rgb));
    }
}

警告: 如果您正在访问32-bpp图像数据,请将返回的指针转换为 QRgb* (QRgb 有32位的大小) 并用它来读取/写入像素值。您不能直接使用 uchar* 指针,因为像素格式依赖于底层平台的字节序。使用 qRed()、qGreen()、qBlue() 和 qAlpha() 来访问像素。

另请参阅 bytesPerLinebitsPixel ManipulationconstScanLine

const uchar *QImage::scanLine(int 行号) const

这是一个重载函数。

void QImage::setAlphaChannel(const QImage &alphaChannel)

设置此图像的 alpha 通道为给定的 alphaChannel

如果 alphaChannel 是一个 8 位 alpha 图像,则直接使用 alpha 值。否则,将 alphaChannel 转换为 8 位灰度,并使用像素值的强度。

如果图像已经有一个 alpha 通道,则将现有 alpha 通道与新的 alpha 通道相乘。如果图像没有 alpha 通道,它将转换为具有 alpha 通道的格式。

该操作类似于使用 QPainter::CompositionMode_DestinationInalphaChannel 作为 alpha 图像绘制到此图像上。

另请参阅 hasAlphaChannelImage TransformationsImage Formats

void QImage::setColor(int 索引, QRgb 颜色值)

将颜色表中的给定 索引 处的颜色设置为给定的 颜色值。颜色值是一个 ARGB 四元组。

如果 索引 超出当前颜色表的大小,它将使用 setColorCount() 扩展。

另请参阅 colorcolorCountsetColorTablePixel Manipulation

void QImage::setColorCount(int 颜色数)

调整颜色表的大小以包含 colorCount 个条目。

如果颜色表被扩展,所有额外的颜色都将设置为透明(即 qRgba(0, 0, 0, 0))。

当使用图像时,颜色表的大小必须足够大,以便包含图像中存在的所有像素/索引值,否则结果将未定义。

另请参阅 colorCount(),colorTable(),setColor(),以及 图像变换

void QImage::setColorSpace(const QColorSpace &colorSpace)

将图像颜色空间设置为 colorSpace,而不会对图像数据执行任何转换。

另请参阅 colorSpace

void QImage::setColorTable(const QList<QRgb> &colors)

将颜色表用于将颜色索引转换为 QRgb 值,设置为指定的 colors

当使用图像时,颜色表的大小必须足够大,以便包含图像中存在的所有像素/索引值,否则结果将未定义。

另请参阅 colorTablesetColor,以及 图像变换

void QImage::setDevicePixelRatio(qreal scaleFactor)

设置图像的设备像素比。这是图像像素与设备无关像素之间的比率。

默认的 scaleFactor 为 1.0。将其实例设置为其他值有两个效果

打开图像的 QPainters 将进行缩放。例如,如果在一个 200x200 的图像上以 2.0 的比率进行绘画,则有效(设备无关)绘画范围将是 100x100。

基于图像大小计算布局几何形状的 Qt 代码路径将考虑比率:QSize 布局大小 = 图像.size() / 图像.devicePixelRatio。这将导致图像以高分辨率图像而不是大图像的形式显示(请参阅 绘制位图和高分辨率图像的高分辨率版本)。

另请参阅 devicePixelRatio() 和 deviceIndependentSize

void QImage::setDotsPerMeterX(int x)

将水平放置一行像素占物理米的像素数设置为 x

dotsPerMeterY 一起,此数字定义了图像的预定缩放和宽高比,并决定 QPainter 在图像上绘制图形的缩放。它不会改变图像在其他绘画设备上的缩放或宽高比。

另请参阅 dotsPerMeterX图像信息

void QImage::setDotsPerMeterY(int y)

将垂直放置一行像素占物理米的像素数设置为 y

dotsPerMeterX()一起,此数字定义了图像期望的缩放比和宽高比,并决定了QPainter在图像上绘制图形时的缩放比例。当图像在其他绘图设备上渲染时,它不会改变图像的缩放比或宽高比。

另请参阅dotsPerMeterY()和图像信息

void QImage::setOffset(const QPoint &offset)

设置图像相对于其他图像定位时预期的偏移像素数,为offset

另请参阅offset()和图像信息

void QImage::setPixel(const QPoint &position, uint index_or_rgb)

将给定位置position的像素索引或颜色设置为index_or_rgb

如果图像的格式是单色或调色板格式,则给定的index_or_rgb必须是图像颜色表中的索引,否则该参数必须是QRgb值。

如果position是图像中的无效坐标对,或者对于单色和调色板图像,如果index_or_rgb >= colorCount(),则结果未定义。

注意:由于调用了内部detach()函数,该函数显得较为昂贵;如果性能是一个问题,我们建议使用scanLine()或bits()直接访问像素数据。

另请参阅pixel()和像素操作

void QImage::setPixel(int x, int y, uint index_or_rgb)

这是一个重载函数。

将位置(x, y)的像素索引或颜色设置为index_or_rgb

void QImage::setPixelColor(const QPoint &position, const QColor &color)

将给定位置position的颜色设置为color

如果position不是图像中的有效坐标对,或者图像的格式是单色或调色板格式,则结果未定义。

注意:由于调用了内部detach()函数,该函数显得较为昂贵;如果性能是一个问题,我们建议使用scanLine()或bits()直接访问像素数据。

另请参阅pixelColor()、pixel()、bits()、scanLine()和像素操作

void QImage::setPixelColor(int x, int , const QColor &color)

这是一个重载函数。

将位置(x, y)的像素颜色设置为color

void QImage::setText(const QString &key, const QString &text)

将图像文本设置为给定的text,并将其与给定的key关联。

如果你只想存储单个文本块(即“注释”或描述),你可以传递一个空键,或使用通用的键如“Description”。

当您调用save()或QImageWriter::write()时,图像文本会被嵌入到图像数据中。

并非所有图像格式都支持嵌入文本。您可以使用QImageWriter::supportsOption()来确定特定的图像或格式是否支持嵌入文本。我们提供了一个示例

    QImageWriter writer;
    writer.setFormat("png");
    if (writer.supportsOption(QImageIOHandler::Description))
        qDebug() << "Png supports embedded text";

您可以使用QImageWriter::supportedImageFormats()来找出您可以访问哪些图像格式。

另请参阅text()和textKeys

QSize QImage::size() const

返回图像的大小,即其width()和height

另请参阅Image InformationdeviceIndependentSize

qsizetype QImage::sizeInBytes() const

返回图像数据的大小(以字节为单位)。

另请参阅bytesPerLinebitsImage Information

[noexcept] void QImage::swap(QImage &other)

与其他图像交换图像other。这个操作非常快,并且永远不会失败。

QString QImage::text(const QString &key = QString()) const

返回与给定key关联的图像文本。如果指定的key是一个空字符串,则返回整个图像文本,其中每个关键-text对用换行符分隔。

另请参阅setText()和textKeys

QStringList QImage::textKeys() const

返回此图像的文本键。

您可以使用这些键与text()一起列出特定键的图像文本。

另请参阅text

CGImageRef QImage::toCGImage() const

创建一个与这个QImage等价的CGImage

返回一个CGImageRef句柄。

返回的CGImageRef参与了QImage的隐式共享,并持有QImage数据的引用。CGImage是不可变的,永远不会从QImage断开连接。写入QImage将像往常一样断开连接。

此函数快速,不复制也不转换图像数据。

以下图像格式受支持,并将映射到相应的本地图像类型

QtCoreGraphics
Format_ARGB32kCGImageAlphaFirst | kCGBitmapByteOrder32Host
Format_RGB32kCGImageAlphaNoneSkipFirst | kCGBitmapByteOrder32Host
Format_RGBA8888_PremultipliedkCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big
Format_RGBA8888kCGImageAlphaLast | kCGBitmapByteOrder32Big
Format_RGBX8888kCGImageAlphaNoneSkipLast | kCGBitmapByteOrder32Big
Format_ARGB32_PremultipliedkCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Host

不支持其他格式;这些情况下此函数返回一个空的CGImageRef。使用此函数的用户可以将QImage先转换为支持的格式,例如Format_ARGB32_Premultiplied

CGImageRef颜色空间设置为sRGB颜色空间。

[since 6.0] HBITMAP QImage::toHBITMAP() const

创建一个与QImage等价的HBITMAP

返回HBITMAP句柄。

请在使用完毕后释放HBITMAP数据。

对于与标准GDI调用一起使用,例如BitBlt(),图像应具有格式QImage::Format_RGB32

当使用结果HBITMAP进行AlphaBlend() GDI函数时,图像应具有格式QImage::Format_ARGB32_Premultiplied(使用convertToFormat)。

当将结果HBITMAP用作应用程序图标或系统托盘图标时,图像应具有格式QImage::Format_ARGB32

此函数自 Qt 6.0 起被引入。

另请参阅fromHBITMAP()和convertToFormat

[since 6.0] HICON QImage::toHICON(const QImage &mask = {}) const

创建一个与QPixmap等价的HICON,应用遮罩mask

如果mask不为空,它需要是格式QImage::Format_Mono。返回HICON句柄。

请在使用完毕后释放HICON数据。

此函数自 Qt 6.0 起被引入。

另请参阅fromHICON

[静态noexcept] QImage::Format QImage::toImageFormat(QPixelFormat format)

format转换为QImage::Format

[静态noexcept] QPixelFormat QImage::toPixelFormat(QImage::Format format)

format转换为QPixelFormat

QImage QImage::transformed(const QTransform &matrix, Qt::TransformationMode mode = Qt::FastTransformation) const

返回一个使用给定变换matrix和变换mode变换后的图像副本。

返回的图像通常将与原始图像具有相同的{图像格式}{格式}。然而,复杂的变换可能导致图像,其中并非所有像素都被原始图像的变换像素覆盖。在这种情况下,这些背景像素将被分配一个透明的颜色值,并且变换图像将被赋予一个具有通道的格式,即使原始图像没有。

该转换矩阵内部自动调整以补偿不希望的平移;即所生成的图像是最小的包含原始图像所有转换点的图像。使用trueMatrix()函数检索用于转换图像的实际矩阵。

与其他重载不同,该函数可用于在图像上执行透视变换。

另请参阅trueMatrix()和图像变换

[静态] QTransform QImage::trueMatrix(const QTransform &matrix, int width, int height)

返回用于根据给定的宽度高度矩阵转换图像的实际矩阵。

当使用transformed()函数转换图像时,转换矩阵内部自动调整以补偿不希望的平移,即transformed()返回包含原始图像所有转换点的最小图像。此函数返回修改后的矩阵,它将正确地将原始图像中的点映射到新图像中。

与其他重载不同,该函数创建可以用于在图像上执行透视变换的转换矩阵。

另请参阅transformed()和图像变换

bool QImage::valid(const QPoint &pos) const

如果pos是图像内的有效坐标对,则返回true;否则返回false

另请参阅rect()和QRect::contains

bool QImage::valid(int x, int y) const

这是一个重载函数。

如果QPoint(x, y)是图像内的有效坐标对,则返回true;否则返回false

int QImage::width() const

返回图像的宽度。

另请参阅 图像信息

QVariant QImage::operator QVariant() const

返回图像作为QVariant

bool QImage::operator!=(const QImage &image) const

如果此图像和给定的image内容不同,则返回true;否则返回false

比较可能很慢,除非有一些明显的差异,例如不同的宽度,在这种情况下,函数将快速返回。

另请参阅operator=

QImage &QImage::operator=(const QImage &image)

将给定的image的浅拷贝分配给此图像,并返回对此图像的引用。

有关浅拷贝的更多信息,请参阅隐式数据共享文档。

另请参阅 copy() 和 QImage

[noexcept] QImage &QImage::operator=(QImage &&other)

other 移赋到当前的 QImage 实例。

bool QImage::operator==(const QImage &image) const

如果此图像与给定的 image 内容相同,则返回 true;否则返回 false

比较可能很慢,除非有一些明显的差异(例如,大小或格式不同),在这种情况下,函数将快速返回。

另请参阅operator=

相关非成员

QImageCleanupFunction

以下签名的一个函数,可以用于实现基本的图像内存管理

void myImageCleanupHandler(void *info);

QDataStream &operator<<(QDataStream &stream, const QImage &image)

将给定的 image 作为 PNG 图像或 BMP 图像写入给定的 stream。注意,将流写入文件不会产生有效的图像文件。

另请参阅 QImage::save() 和 序列化 Qt 数据类型

QDataStream &operator>>(QDataStream &stream, QImage &image)

从给定的 stream 中读取图像并存储在给定的 image 中。

另请参阅 QImage::load() 和 序列化 Qt 数据类型

© 2024 Qt 公司。此处包含的文档贡献是各自所有者的版权。此处提供的文档是根据自由软件基金会发布的 GNU 自由文档许可协议版本 1.3 许可的。Qt 和相关徽标是芬兰以及全球其他国家的 Qt 公司商标。所有其他商标均为其各自所有者的财产。