37class Q_GUI_EXPORT
QImage :
public QPaintDevice
41 enum InvertMode { InvertRgb, InvertRgba };
49 Format_ARGB32_Premultiplied,
51 Format_ARGB8565_Premultiplied,
53 Format_ARGB6666_Premultiplied,
55 Format_ARGB8555_Premultiplied,
58 Format_ARGB4444_Premultiplied,
61 Format_RGBA8888_Premultiplied,
63 Format_A2BGR30_Premultiplied,
65 Format_A2RGB30_Premultiplied,
70 Format_RGBA64_Premultiplied,
75 Format_RGBA16FPx4_Premultiplied,
78 Format_RGBA32FPx4_Premultiplied,
87 QImage(
const QSize &size, Format format);
88 QImage(
int width,
int height, Format format);
89 QImage(uchar *data,
int width,
int height, Format format, QImageCleanupFunction cleanupFunction =
nullptr,
void *cleanupInfo =
nullptr);
90 QImage(
const uchar *data,
int width,
int height, Format format, QImageCleanupFunction cleanupFunction =
nullptr,
void *cleanupInfo =
nullptr);
91 QImage(uchar *data,
int width,
int height, qsizetype bytesPerLine, Format format, QImageCleanupFunction cleanupFunction =
nullptr,
void *cleanupInfo =
nullptr);
92 QImage(
const uchar *data,
int width,
int height, qsizetype bytesPerLine, Format format, QImageCleanupFunction cleanupFunction =
nullptr,
void *cleanupInfo =
nullptr);
94#ifndef QT_NO_IMAGEFORMAT_XPM
95 explicit QImage(
const char *
const xpm[]);
97 explicit QImage(
const QString &fileName,
const char *format =
nullptr);
99 QImage(
const QImage &);
100 QImage(QImage &&other)
noexcept
101 : QPaintDevice(), d(std::exchange(other.d,
nullptr))
105 QImage &operator=(
const QImage &);
106 QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_MOVE_AND_SWAP(QImage)
107 void swap(QImage &other)
noexcept
108 { qt_ptr_swap(d, other.d); }
112 int devType()
const override;
114 bool operator==(
const QImage &)
const;
115 bool operator!=(
const QImage &)
const;
116 operator QVariant()
const;
118 bool isDetached()
const;
120 [[nodiscard]] QImage copy(
const QRect &rect = QRect())
const;
121 [[nodiscard]] QImage copy(
int x,
int y,
int w,
int h)
const
122 {
return copy(QRect(x, y, w, h)); }
124 Format format()
const;
126 [[nodiscard]] QImage convertToFormat(Format f, Qt::ImageConversionFlags flags = Qt::AutoColor)
const &
127 {
return convertToFormat_helper(f, flags); }
128 [[nodiscard]] QImage convertToFormat(Format f, Qt::ImageConversionFlags flags = Qt::AutoColor) &&
130 if (convertToFormat_inplace(f, flags))
131 return std::move(*
this);
133 return convertToFormat_helper(f, flags);
135 [[nodiscard]] QImage convertToFormat(Format f,
const QList<QRgb> &colorTable,
136 Qt::ImageConversionFlags flags = Qt::AutoColor)
const;
138 bool reinterpretAsFormat(Format f);
139 [[nodiscard]] QImage convertedTo(Format f, Qt::ImageConversionFlags flags = Qt::AutoColor)
const &
140 {
return convertToFormat(f, flags); }
141 [[nodiscard]] QImage convertedTo(Format f, Qt::ImageConversionFlags flags = Qt::AutoColor) &&
142 {
return convertToFormat(f, flags); }
143 void convertTo(Format f, Qt::ImageConversionFlags flags = Qt::AutoColor);
151 int colorCount()
const;
152 int bitPlaneCount()
const;
154 QRgb color(
int i)
const;
155 void setColor(
int i, QRgb c);
156 void setColorCount(
int);
158 bool allGray()
const;
159 bool isGrayscale()
const;
162 const uchar *bits()
const;
163 const uchar *constBits()
const;
165 qsizetype sizeInBytes()
const;
167 uchar *scanLine(
int);
168 const uchar *scanLine(
int)
const;
169 const uchar *constScanLine(
int)
const;
170 qsizetype bytesPerLine()
const;
172 bool valid(
int x,
int y)
const;
173 bool valid(
const QPoint &pt)
const;
175 int pixelIndex(
int x,
int y)
const;
176 int pixelIndex(
const QPoint &pt)
const;
178 QRgb pixel(
int x,
int y)
const;
179 QRgb pixel(
const QPoint &pt)
const;
181 void setPixel(
int x,
int y, uint index_or_rgb);
182 void setPixel(
const QPoint &pt, uint index_or_rgb);
184 QColor pixelColor(
int x,
int y)
const;
185 QColor pixelColor(
const QPoint &pt)
const;
187 void setPixelColor(
int x,
int y,
const QColor &c);
188 void setPixelColor(
const QPoint &pt,
const QColor &c);
190 QList<QRgb> colorTable()
const;
191 void setColorTable(
const QList<QRgb> &colors);
193 qreal devicePixelRatio()
const;
194 void setDevicePixelRatio(qreal scaleFactor);
195 QSizeF deviceIndependentSize()
const;
197 void fill(uint pixel);
198 void fill(
const QColor &color);
199 void fill(Qt::GlobalColor color);
202 bool hasAlphaChannel()
const;
203 void setAlphaChannel(
const QImage &alphaChannel);
204 [[nodiscard]] QImage createAlphaMask(Qt::ImageConversionFlags flags = Qt::AutoColor)
const;
205#ifndef QT_NO_IMAGE_HEURISTIC_MASK
206 [[nodiscard]] QImage createHeuristicMask(
bool clipTight =
true)
const;
208 [[nodiscard]] QImage createMaskFromColor(QRgb color, Qt::MaskMode mode = Qt::MaskInColor)
const;
210 [[nodiscard]] QImage scaled(
int w,
int h, Qt::AspectRatioMode aspectMode = Qt::IgnoreAspectRatio,
211 Qt::TransformationMode mode = Qt::FastTransformation)
const
212 {
return scaled(QSize(w, h), aspectMode, mode); }
213 [[nodiscard]] QImage scaled(
const QSize &s, Qt::AspectRatioMode aspectMode = Qt::IgnoreAspectRatio,
214 Qt::TransformationMode mode = Qt::FastTransformation)
const;
215 [[nodiscard]] QImage scaledToWidth(
int w, Qt::TransformationMode mode = Qt::FastTransformation)
const;
216 [[nodiscard]] QImage scaledToHeight(
int h, Qt::TransformationMode mode = Qt::FastTransformation)
const;
217 [[nodiscard]] QImage transformed(
const QTransform &matrix, Qt::TransformationMode mode = Qt::FastTransformation)
const;
218 static QTransform trueMatrix(
const QTransform &,
int w,
int h);
219#if QT_DEPRECATED_SINCE(6
, 13
)
220 QT_DEPRECATED_VERSION_X_6_13(
"Use flipped(Qt::Orientations) instead")
221 [[nodiscard]] QImage mirrored(
bool horizontally =
false,
bool vertically =
true)
const &
222 {
return mirrored_helper(horizontally, vertically); }
223 QT_DEPRECATED_VERSION_X_6_13(
"Use flipped(Qt::Orientations) instead")
224 [[nodiscard]] QImage mirrored(
bool horizontally =
false,
bool vertically =
true) &&
225 { mirrored_inplace(horizontally, vertically);
return std::move(*
this); }
226 QT_DEPRECATED_VERSION_X_6_13(
"Use flip(Qt::Orientations) instead")
227 void mirror(
bool horizontally =
false,
bool vertically =
true)
228 { mirrored_inplace(horizontally, vertically); }
230 [[nodiscard]] QImage rgbSwapped()
const &
231 {
return rgbSwapped_helper(); }
232 [[nodiscard]] QImage rgbSwapped() &&
233 { rgbSwapped_inplace();
return std::move(*
this); }
234 [[nodiscard]] QImage flipped(Qt::Orientations orient = Qt::Vertical)
const &
235 {
return mirrored_helper(orient.testFlag(Qt::Horizontal), orient.testFlag(Qt::Vertical)); }
236 [[nodiscard]] QImage flipped(Qt::Orientations orient = Qt::Vertical) &&
237 { mirrored_inplace(orient.testFlag(Qt::Horizontal), orient.testFlag(Qt::Vertical));
return std::move(*
this); }
238 void flip(Qt::Orientations orient = Qt::Vertical)
239 { mirrored_inplace(orient.testFlag(Qt::Horizontal), orient.testFlag(Qt::Vertical)); }
241 { rgbSwapped_inplace(); }
242 void invertPixels(InvertMode = InvertRgb);
244 QColorSpace colorSpace()
const;
245 [[nodiscard]] QImage convertedToColorSpace(
const QColorSpace &colorSpace)
const;
246 [[nodiscard]] QImage convertedToColorSpace(
const QColorSpace &colorSpace, QImage::Format format,
247 Qt::ImageConversionFlags flags = Qt::AutoColor)
const &;
248 [[nodiscard]] QImage convertedToColorSpace(
const QColorSpace &colorSpace, QImage::Format format,
249 Qt::ImageConversionFlags flags = Qt::AutoColor) &&;
250 void convertToColorSpace(
const QColorSpace &colorSpace);
251 void convertToColorSpace(
const QColorSpace &colorSpace, QImage::Format format, Qt::ImageConversionFlags flags = Qt::AutoColor);
252 void setColorSpace(
const QColorSpace &colorSpace);
254 QImage colorTransformed(
const QColorTransform &transform)
const &;
255 QImage colorTransformed(
const QColorTransform &transform, QImage::Format format, Qt::ImageConversionFlags flags = Qt::AutoColor)
const &;
256 QImage colorTransformed(
const QColorTransform &transform) &&;
257 QImage colorTransformed(
const QColorTransform &transform, QImage::Format format, Qt::ImageConversionFlags flags = Qt::AutoColor) &&;
258 void applyColorTransform(
const QColorTransform &transform);
259 void applyColorTransform(
const QColorTransform &transform, QImage::Format format, Qt::ImageConversionFlags flags = Qt::AutoColor);
261 bool load(QIODevice *device,
const char *format);
262 bool load(
const QString &fileName,
const char *format =
nullptr);
263 bool loadFromData(QByteArrayView data,
const char *format =
nullptr);
264 bool loadFromData(
const uchar *buf,
int len,
const char *format =
nullptr);
265 bool loadFromData(
const QByteArray &data,
const char *format =
nullptr)
266 {
return loadFromData(QByteArrayView(data), format); }
268 bool save(
const QString &fileName,
const char *format =
nullptr,
int quality = -1)
const;
269 bool save(QIODevice *device,
const char *format =
nullptr,
int quality = -1)
const;
271 static QImage fromData(QByteArrayView data,
const char *format =
nullptr);
272 static QImage fromData(
const uchar *data,
int size,
const char *format =
nullptr);
273 static QImage fromData(
const QByteArray &data,
const char *format =
nullptr)
274 {
return fromData(QByteArrayView(data), format); }
276 qint64 cacheKey()
const;
278 QPaintEngine *paintEngine()
const override;
281 int dotsPerMeterX()
const;
282 int dotsPerMeterY()
const;
283 void setDotsPerMeterX(
int);
284 void setDotsPerMeterY(
int);
285 QPoint offset()
const;
286 void setOffset(
const QPoint&);
288 QStringList textKeys()
const;
289 QString text(
const QString &key = QString())
const;
290 void setText(
const QString &key,
const QString &value);
292 QPixelFormat pixelFormat()
const noexcept;
293 static QPixelFormat toPixelFormat(QImage::Format format)
noexcept;
294 static QImage::Format toImageFormat(QPixelFormat format)
noexcept;
297#if defined(Q_OS_DARWIN) || defined(Q_QDOC)
298 CGImageRef toCGImage()
const Q_DECL_CF_RETURNS_RETAINED;
300#if defined(Q_OS_WIN) || defined(Q_QDOC)
301 HBITMAP toHBITMAP()
const;
302 HICON toHICON(
const QImage &mask = {})
const;
303 static QImage fromHBITMAP(HBITMAP hbitmap);
304 static QImage fromHICON(HICON icon);
308 virtual int metric(PaintDeviceMetric metric)
const override;
309 QImage mirrored_helper(
bool horizontal,
bool vertical)
const;
310 QImage rgbSwapped_helper()
const;
311 void mirrored_inplace(
bool horizontal,
bool vertical);
312 void rgbSwapped_inplace();
313 QImage convertToFormat_helper(Format format, Qt::ImageConversionFlags flags)
const;
314 bool convertToFormat_inplace(Format format, Qt::ImageConversionFlags flags);
315 QImage smoothScaled(
int w,
int h)
const;
317 void detachMetadata(
bool invalidateCache =
false);
322 friend class QRasterPlatformPixmap;
323 friend class QBlittablePlatformPixmap;
324 friend class QPixmapCacheEntry;
325 friend struct QImageData;
328 typedef QImageData * DataPtr;
329 inline DataPtr &data_ptr() {
return d; }