Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qimage_p.h
Go to the documentation of this file.
1// Copyright (C) 2021 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3// Qt-Security score:significant reason:default
4
5#ifndef QIMAGE_P_H
6#define QIMAGE_P_H
7
8//
9// W A R N I N G
10// -------------
11//
12// This file is not part of the Qt API. It exists purely as an
13// implementation detail. This header file may change from version to
14// version without notice, or even be removed.
15//
16// We mean it.
17//
18
19#include <QtGui/private/qtguiglobal_p.h>
20#include <QtGui/qcolorspace.h>
21#include <QtGui/qimage.h>
22#include <QtCore/private/qnumeric_p.h>
23#include <QtCore/qlist.h>
24#include <QtCore/qloggingcategory.h>
25#include <QtCore/qmap.h>
26#include <QtCore/qttypetraits.h>
27
28
29QT_BEGIN_NAMESPACE
30
31Q_DECLARE_LOGGING_CATEGORY(lcImageIo)
32
33class QImageWriter;
34
35struct Q_GUI_EXPORT QImageData { // internal image data
36 QImageData();
37 ~QImageData();
38 static QImageData *create(const QSize &size, QImage::Format format);
39 static QImageData *create(uchar *data, int w, int h, qsizetype bpl, QImage::Format format, bool readOnly, QImageCleanupFunction cleanupFunction = nullptr, void *cleanupInfo = nullptr);
40
41 static QImageData *get(QImage &img) noexcept { return img.d; }
42 static const QImageData *get(const QImage &img) noexcept { return img.d; }
43
45
46 int width;
47 int height;
48 int depth;
49 qsizetype nbytes; // number of bytes data
53 QImage::Format format; // invariants: > Format_Invalid, < NImageFormats
55 int ser_no; // serial number
57
58 qreal dpmx; // dots per meter X (or 0)
59 qreal dpmy; // dots per meter Y (or 0)
60 QPoint offset; // offset in pixels
61
66
69
70 bool checkForAlphaPixels() const;
71
72 // Convert the image in-place, minimizing memory reallocation
73 // Return false if the conversion cannot be done in-place.
74 bool convertInPlace(QImage::Format newFormat, Qt::ImageConversionFlags);
75
77
78 bool doImageIO(const QImage *image, QImageWriter* io, int quality) const;
79
81
83
87 bool isValid() const { return bytesPerLine > 0 && totalSize > 0; }
88 };
89 static ImageSizeParameters calculateImageParameters(qsizetype width, qsizetype height, qsizetype depth);
90 static bool isWithinIOAllocationLimit(int width, int height, QImage::Format format,
91 const char *context = nullptr);
92};
93
94inline QImageData::ImageSizeParameters
95QImageData::calculateImageParameters(qsizetype width, qsizetype height, qsizetype depth)
96{
97 ImageSizeParameters invalid = { -1, -1 };
98 if (height <= 0)
99 return invalid;
100
101 // calculate the size, taking care of overflows
102 qsizetype bytes_per_line;
103 if (qMulOverflow(width, depth, &bytes_per_line))
104 return invalid;
105 if (qAddOverflow(bytes_per_line, qsizetype(31), &bytes_per_line))
106 return invalid;
107 // bytes per scanline (must be multiple of 4)
108 bytes_per_line = (bytes_per_line >> 5) << 2; // can't overflow
109
110 qsizetype total_size;
111 if (qMulOverflow(height, bytes_per_line, &total_size))
112 return invalid;
113 qsizetype dummy;
114 if (qMulOverflow(height, qsizetype(sizeof(uchar *)), &dummy))
115 return invalid; // why is this here?
116 // Disallow images where width * depth calculations might overflow
117 if (width > (INT_MAX - 31) / depth)
118 return invalid;
119
120 return { bytes_per_line, total_size };
121}
122
123typedef void (*Image_Converter)(QImageData *dest, const QImageData *src, Qt::ImageConversionFlags);
124typedef bool (*InPlace_Image_Converter)(QImageData *data, Qt::ImageConversionFlags);
125
126extern Image_Converter qimage_converter_map[QImage::NImageFormats][QImage::NImageFormats];
127extern InPlace_Image_Converter qimage_inplace_converter_map[QImage::NImageFormats][QImage::NImageFormats];
128
129void convert_generic(QImageData *dest, const QImageData *src, Qt::ImageConversionFlags);
130void convert_generic_over_rgb64(QImageData *dest, const QImageData *src, Qt::ImageConversionFlags);
131bool convert_generic_inplace(QImageData *data, QImage::Format dst_format, Qt::ImageConversionFlags);
132bool convert_generic_inplace_over_rgb64(QImageData *data, QImage::Format dst_format, Qt::ImageConversionFlags);
133#if QT_CONFIG(raster_fp)
134void convert_generic_over_rgba32f(QImageData *dest, const QImageData *src, Qt::ImageConversionFlags);
135bool convert_generic_inplace_over_rgba32f(QImageData *data, QImage::Format dst_format, Qt::ImageConversionFlags);
136#endif
137
138void dither_to_Mono(QImageData *dst, const QImageData *src, Qt::ImageConversionFlags flags, bool fromalpha);
139
141Q_GUI_EXPORT void qGamma_correct_back_to_linear_cs(QImage *image);
142
143#if defined(_M_ARM) && defined(_MSC_VER) // QTBUG-42038
144#pragma optimize("", off)
145#endif
146inline int qt_depthForFormat(QImage::Format format)
147{
148 int depth = 0;
149 switch(format) {
150 case QImage::Format_Invalid:
151 case QImage::NImageFormats:
152 Q_UNREACHABLE();
153 case QImage::Format_Mono:
154 case QImage::Format_MonoLSB:
155 depth = 1;
156 break;
157 case QImage::Format_Indexed8:
158 case QImage::Format_Alpha8:
159 case QImage::Format_Grayscale8:
160 depth = 8;
161 break;
162 case QImage::Format_RGB32:
163 case QImage::Format_ARGB32:
164 case QImage::Format_ARGB32_Premultiplied:
165 case QImage::Format_RGBX8888:
166 case QImage::Format_RGBA8888:
167 case QImage::Format_RGBA8888_Premultiplied:
168 case QImage::Format_BGR30:
169 case QImage::Format_A2BGR30_Premultiplied:
170 case QImage::Format_RGB30:
171 case QImage::Format_A2RGB30_Premultiplied:
172 depth = 32;
173 break;
174 case QImage::Format_RGB555:
175 case QImage::Format_RGB16:
176 case QImage::Format_RGB444:
177 case QImage::Format_ARGB4444_Premultiplied:
178 case QImage::Format_Grayscale16:
179 depth = 16;
180 break;
181 case QImage::Format_RGB666:
182 case QImage::Format_ARGB6666_Premultiplied:
183 case QImage::Format_ARGB8565_Premultiplied:
184 case QImage::Format_ARGB8555_Premultiplied:
185 case QImage::Format_RGB888:
186 case QImage::Format_BGR888:
187 depth = 24;
188 break;
189 case QImage::Format_RGBX64:
190 case QImage::Format_RGBA64:
191 case QImage::Format_RGBA64_Premultiplied:
192 case QImage::Format_RGBX16FPx4:
193 case QImage::Format_RGBA16FPx4:
194 case QImage::Format_RGBA16FPx4_Premultiplied:
195 depth = 64;
196 break;
197 case QImage::Format_RGBX32FPx4:
198 case QImage::Format_RGBA32FPx4:
199 case QImage::Format_RGBA32FPx4_Premultiplied:
200 depth = 128;
201 break;
202 case QImage::Format_CMYK8888:
203 depth = 32;
204 break;
205 }
206 return depth;
207}
208
209#if defined(_M_ARM) && defined(_MSC_VER)
210#pragma optimize("", on)
211#endif
212
213inline QImage::Format qt_opaqueVersion(QImage::Format format)
214{
215 switch (format) {
216 case QImage::Format_ARGB8565_Premultiplied:
217 return QImage::Format_RGB16;
218 case QImage::Format_ARGB8555_Premultiplied:
219 return QImage::Format_RGB555;
220 case QImage::Format_ARGB6666_Premultiplied:
221 return QImage::Format_RGB666;
222 case QImage::Format_ARGB4444_Premultiplied:
223 return QImage::Format_RGB444;
224 case QImage::Format_RGBA8888:
225 case QImage::Format_RGBA8888_Premultiplied:
226 return QImage::Format_RGBX8888;
227 case QImage::Format_A2BGR30_Premultiplied:
228 return QImage::Format_BGR30;
229 case QImage::Format_A2RGB30_Premultiplied:
230 return QImage::Format_RGB30;
231 case QImage::Format_RGBA64:
232 case QImage::Format_RGBA64_Premultiplied:
233 return QImage::Format_RGBX64;
234 case QImage::Format_RGBA16FPx4:
235 case QImage::Format_RGBA16FPx4_Premultiplied:
236 return QImage::Format_RGBX16FPx4;
237 case QImage::Format_RGBA32FPx4:
238 case QImage::Format_RGBA32FPx4_Premultiplied:
239 return QImage::Format_RGBX32FPx4;
240 case QImage::Format_ARGB32_Premultiplied:
241 case QImage::Format_ARGB32:
242 return QImage::Format_RGB32;
243 case QImage::Format_RGB16:
244 case QImage::Format_RGB32:
245 case QImage::Format_RGB444:
246 case QImage::Format_RGB555:
247 case QImage::Format_RGB666:
248 case QImage::Format_RGB888:
249 case QImage::Format_BGR888:
250 case QImage::Format_RGBX8888:
251 case QImage::Format_BGR30:
252 case QImage::Format_RGB30:
253 case QImage::Format_RGBX64:
254 case QImage::Format_RGBX16FPx4:
255 case QImage::Format_RGBX32FPx4:
256 case QImage::Format_Grayscale8:
257 case QImage::Format_Grayscale16:
258 case QImage::Format_CMYK8888:
259 return format;
260 case QImage::Format_Mono:
261 case QImage::Format_MonoLSB:
262 case QImage::Format_Indexed8:
263 case QImage::Format_Alpha8:
264 case QImage::Format_Invalid:
265 case QImage::NImageFormats:
266 break;
267 }
268 return QImage::Format_RGB32;
269}
270
271inline QImage::Format qt_alphaVersion(QImage::Format format)
272{
273 switch (format) {
274 case QImage::Format_RGB32:
275 case QImage::Format_ARGB32:
276 return QImage::Format_ARGB32_Premultiplied;
277 case QImage::Format_RGB16:
278 return QImage::Format_ARGB8565_Premultiplied;
279 case QImage::Format_RGB555:
280 return QImage::Format_ARGB8555_Premultiplied;
281 case QImage::Format_RGB666:
282 return QImage::Format_ARGB6666_Premultiplied;
283 case QImage::Format_RGB444:
284 return QImage::Format_ARGB4444_Premultiplied;
285 case QImage::Format_RGBX8888:
286 case QImage::Format_RGBA8888:
287 return QImage::Format_RGBA8888_Premultiplied;
288 case QImage::Format_BGR30:
289 return QImage::Format_A2BGR30_Premultiplied;
290 case QImage::Format_RGB30:
291 return QImage::Format_A2RGB30_Premultiplied;
292 case QImage::Format_RGBX64:
293 case QImage::Format_RGBA64:
294 case QImage::Format_Grayscale16:
295 return QImage::Format_RGBA64_Premultiplied;
296 case QImage::Format_RGBX16FPx4:
297 case QImage::Format_RGBA16FPx4:
298 return QImage::Format_RGBA16FPx4_Premultiplied;
299 case QImage::Format_RGBX32FPx4:
300 case QImage::Format_RGBA32FPx4:
301 return QImage::Format_RGBA32FPx4_Premultiplied;
302 case QImage::Format_ARGB32_Premultiplied:
303 case QImage::Format_ARGB8565_Premultiplied:
304 case QImage::Format_ARGB8555_Premultiplied:
305 case QImage::Format_ARGB6666_Premultiplied:
306 case QImage::Format_ARGB4444_Premultiplied:
307 case QImage::Format_RGBA8888_Premultiplied:
308 case QImage::Format_A2BGR30_Premultiplied:
309 case QImage::Format_A2RGB30_Premultiplied:
310 case QImage::Format_RGBA64_Premultiplied:
311 case QImage::Format_RGBA16FPx4_Premultiplied:
312 case QImage::Format_RGBA32FPx4_Premultiplied:
313 return format;
314 case QImage::Format_Mono:
315 case QImage::Format_MonoLSB:
316 case QImage::Format_Indexed8:
317 case QImage::Format_RGB888:
318 case QImage::Format_BGR888:
319 case QImage::Format_Alpha8:
320 case QImage::Format_Grayscale8:
321 case QImage::Format_Invalid:
322 case QImage::Format_CMYK8888:
323 case QImage::NImageFormats:
324 break;
325 }
326 return QImage::Format_ARGB32_Premultiplied;
327}
328
329// Returns an opaque version that is compatible with format
331{
332 switch (format) {
333 case QImage::Format_ARGB6666_Premultiplied:
334 return QImage::Format_RGB666;
335 case QImage::Format_ARGB4444_Premultiplied:
336 return QImage::Format_RGB444;
337 case QImage::Format_RGBA8888:
338 case QImage::Format_RGBA8888_Premultiplied:
339 return QImage::Format_RGBX8888;
340 case QImage::Format_A2BGR30_Premultiplied:
341 return QImage::Format_BGR30;
342 case QImage::Format_A2RGB30_Premultiplied:
343 return QImage::Format_RGB30;
344 case QImage::Format_RGBA64:
345 case QImage::Format_RGBA64_Premultiplied:
346 return QImage::Format_RGBX64;
347 case QImage::Format_RGBA16FPx4:
348 case QImage::Format_RGBA16FPx4_Premultiplied:
349 return QImage::Format_RGBX16FPx4;
350 case QImage::Format_RGBA32FPx4:
351 case QImage::Format_RGBA32FPx4_Premultiplied:
352 return QImage::Format_RGBX32FPx4;
353 case QImage::Format_ARGB32_Premultiplied:
354 case QImage::Format_ARGB32:
355 return QImage::Format_RGB32;
356 case QImage::Format_RGB16:
357 case QImage::Format_RGB32:
358 case QImage::Format_RGB444:
359 case QImage::Format_RGB555:
360 case QImage::Format_RGB666:
361 case QImage::Format_RGB888:
362 case QImage::Format_BGR888:
363 case QImage::Format_RGBX8888:
364 case QImage::Format_BGR30:
365 case QImage::Format_RGB30:
366 case QImage::Format_RGBX64:
367 case QImage::Format_RGBX16FPx4:
368 case QImage::Format_RGBX32FPx4:
369 case QImage::Format_Grayscale8:
370 case QImage::Format_Grayscale16:
371 case QImage::Format_CMYK8888:
372 return format; // Already opaque
373 case QImage::Format_Mono:
374 case QImage::Format_MonoLSB:
375 case QImage::Format_Indexed8:
376 case QImage::Format_ARGB8565_Premultiplied:
377 case QImage::Format_ARGB8555_Premultiplied:
378 case QImage::Format_Alpha8:
379 case QImage::Format_Invalid:
380 case QImage::NImageFormats:
381 break;
382 }
383 return format; // No compatible opaque versions
384}
385
386constexpr QImage::Format qt_toUnpremultipliedFormat(QImage::Format format)
387{
388 // Assumes input is already a premultiplied format with an unpremultiplied counterpart
389 // This abuses the fact unpremultiplied formats are always before their premultiplied counterparts.
390 return static_cast<QImage::Format>(qToUnderlying(format) - 1);
391}
392
393constexpr QImage::Format qt_toPremultipliedFormat(QImage::Format format)
394{
395 // Assumes input is already an unpremultiplied format
396 // This abuses the fact unpremultiplied formats are always before their premultiplied counterparts.
397 return static_cast<QImage::Format>(qToUnderlying(format) + 1);
398}
399
400inline bool qt_highColorPrecision(QImage::Format format, bool opaque = false)
401{
402 // Formats with higher color precision than ARGB32_Premultiplied.
403 switch (format) {
404 case QImage::Format_ARGB32:
405 case QImage::Format_RGBA8888:
406 return !opaque;
407 case QImage::Format_BGR30:
408 case QImage::Format_RGB30:
409 case QImage::Format_A2BGR30_Premultiplied:
410 case QImage::Format_A2RGB30_Premultiplied:
411 case QImage::Format_RGBX64:
412 case QImage::Format_RGBA64:
413 case QImage::Format_RGBA64_Premultiplied:
414 case QImage::Format_Grayscale16:
415 case QImage::Format_RGBX16FPx4:
416 case QImage::Format_RGBA16FPx4:
417 case QImage::Format_RGBA16FPx4_Premultiplied:
418 case QImage::Format_RGBX32FPx4:
419 case QImage::Format_RGBA32FPx4:
420 case QImage::Format_RGBA32FPx4_Premultiplied:
421 return true;
422 default:
423 break;
424 }
425 return false;
426}
427
428inline bool qt_fpColorPrecision(QImage::Format format)
429{
430 switch (format) {
431 case QImage::Format_RGBX16FPx4:
432 case QImage::Format_RGBA16FPx4:
433 case QImage::Format_RGBA16FPx4_Premultiplied:
434 case QImage::Format_RGBX32FPx4:
435 case QImage::Format_RGBA32FPx4:
436 case QImage::Format_RGBA32FPx4_Premultiplied:
437 return true;
438 default:
439 break;
440 }
441 return false;
442}
443
444inline QColorSpace::ColorModel qt_csColorData(QPixelFormat::ColorModel format)
445{
446 switch (format) {
447 case QPixelFormat::ColorModel::RGB:
448 case QPixelFormat::ColorModel::BGR:
449 case QPixelFormat::ColorModel::Indexed:
450 return QColorSpace::ColorModel::Rgb;
451 case QPixelFormat::ColorModel::Alpha:
452 return QColorSpace::ColorModel::Undefined; // No valid colors
453 case QPixelFormat::ColorModel::Grayscale:
454 return QColorSpace::ColorModel::Gray;
455 case QPixelFormat::ColorModel::CMYK:
456 return QColorSpace::ColorModel::Cmyk;
457 default:
458 break;
459 }
460 return QColorSpace::ColorModel::Undefined;
461}
462
463inline bool qt_compatibleColorModelBase(QPixelFormat::ColorModel data, QColorSpace::ColorModel cs)
464{
465 QColorSpace::ColorModel dataCs = qt_csColorData(data);
466
467 if (data == QPixelFormat::ColorModel::Alpha)
468 return true; // Alpha data has no colors and can be handled by any color space
469
470 if (cs == QColorSpace::ColorModel::Undefined || dataCs == QColorSpace::ColorModel::Undefined)
471 return false;
472
473 return (dataCs == cs); // Matching color models
474}
475
476inline bool qt_compatibleColorModelSource(QPixelFormat::ColorModel data, QColorSpace::ColorModel cs)
477{
478 if (qt_compatibleColorModelBase(data, cs))
479 return true;
480
481 if (data == QPixelFormat::ColorModel::Grayscale && cs == QColorSpace::ColorModel::Rgb)
482 return true; // Can apply Rgb CS to Gray input data
483
484 return false;
485}
486
487inline bool qt_compatibleColorModelTarget(QPixelFormat::ColorModel data, QColorSpace::ColorModel cs, QColorSpace::TransformModel tm)
488{
489 if (qt_compatibleColorModelBase(data, cs))
490 return true;
491
492 if (data == QPixelFormat::ColorModel::Grayscale && tm == QColorSpace::TransformModel::ThreeComponentMatrix)
493 return true; // Can apply three-component matrix CS to gray output
494
495 return false;
496}
497
499{
500 switch (format) {
501 case QImage::Format_RGB32:
502 return QImage::Format_ARGB32_Premultiplied;
503 case QImage::Format_RGB666:
504 return QImage::Format_ARGB6666_Premultiplied;
505 case QImage::Format_RGB444:
506 return QImage::Format_ARGB4444_Premultiplied;
507 case QImage::Format_RGBX8888:
508 return QImage::Format_RGBA8888_Premultiplied;
509 case QImage::Format_BGR30:
510 return QImage::Format_A2BGR30_Premultiplied;
511 case QImage::Format_RGB30:
512 return QImage::Format_A2RGB30_Premultiplied;
513 case QImage::Format_RGBX64:
514 return QImage::Format_RGBA64_Premultiplied;
515 case QImage::Format_RGBX16FPx4:
516 return QImage::Format_RGBA16FPx4_Premultiplied;
517 case QImage::Format_RGBX32FPx4:
518 return QImage::Format_RGBA32FPx4_Premultiplied;
519 case QImage::Format_ARGB32:
520 case QImage::Format_ARGB32_Premultiplied:
521 case QImage::Format_ARGB8565_Premultiplied:
522 case QImage::Format_ARGB8555_Premultiplied:
523 case QImage::Format_ARGB6666_Premultiplied:
524 case QImage::Format_ARGB4444_Premultiplied:
525 case QImage::Format_RGBA8888:
526 case QImage::Format_RGBA8888_Premultiplied:
527 case QImage::Format_A2BGR30_Premultiplied:
528 case QImage::Format_A2RGB30_Premultiplied:
529 case QImage::Format_Alpha8:
530 case QImage::Format_RGBA64:
531 case QImage::Format_RGBA64_Premultiplied:
532 case QImage::Format_RGBA16FPx4:
533 case QImage::Format_RGBA16FPx4_Premultiplied:
534 case QImage::Format_RGBA32FPx4:
535 case QImage::Format_RGBA32FPx4_Premultiplied:
536 return format; // Already alpha versions
537 case QImage::Format_Mono:
538 case QImage::Format_MonoLSB:
539 case QImage::Format_Indexed8:
540 case QImage::Format_RGB16:
541 case QImage::Format_RGB555:
542 case QImage::Format_RGB888:
543 case QImage::Format_BGR888:
544 case QImage::Format_Grayscale8:
545 case QImage::Format_Grayscale16:
546 case QImage::Format_CMYK8888:
547 case QImage::Format_Invalid:
548 case QImage::NImageFormats:
549 break;
550 }
551 return format; // No data-compatible alpha version
552}
553
554inline QImage::Format qt_opaqueVersionForPainting(QImage::Format format)
555{
556 QImage::Format toFormat = qt_opaqueVersion(format);
557 // If we are switching depth anyway upgrade to RGB32
558 if (qt_depthForFormat(format) != qt_depthForFormat(toFormat) && qt_depthForFormat(toFormat) <= 32)
559 toFormat = QImage::Format_RGB32;
560 return toFormat;
561}
562
563inline QImage::Format qt_alphaVersionForPainting(QImage::Format format)
564{
565 QImage::Format toFormat = qt_alphaVersion(format);
566#if defined(__ARM_NEON__) || defined(__SSE2__) || defined(QT_COMPILER_SUPPORT_LSX)
567 // If we are switching depth anyway and we have optimized ARGB32PM routines, upgrade to that.
568 if (qt_depthForFormat(format) != qt_depthForFormat(toFormat) && qt_depthForFormat(toFormat) <= 32)
569 toFormat = QImage::Format_ARGB32_Premultiplied;
570#endif
571 return toFormat;
572}
573
574Q_GUI_EXPORT QMap<QString, QString> qt_getImageText(const QImage &image, const QString &description);
575Q_GUI_EXPORT QMap<QString, QString> qt_getImageTextFromDescription(const QString &description);
576
577Q_GUI_EXPORT bool qt_xForm_helper(const QTransform &trueMat, int xoffset, int type, int depth,
578 uchar *dptr, qsizetype dbpl, int p_inc, int dHeight,
579 const uchar *sptr, qsizetype sbpl, int sWidth, int sHeight);
580
581QT_END_NAMESPACE
582
583#endif // QIMAGE_P_H
Combined button and popup list for selecting options.
const uchar * qt_get_bitflip_array()
Image_Converter qimage_converter_map[QImage::NImageFormats][QImage::NImageFormats]
InPlace_Image_Converter qimage_inplace_converter_map[QImage::NImageFormats][QImage::NImageFormats]
bool convert_generic_inplace_over_rgb64(QImageData *data, QImage::Format dst_format, Qt::ImageConversionFlags)
constexpr QImage::Format qt_toUnpremultipliedFormat(QImage::Format format)
Definition qimage_p.h:386
QImage::Format qt_maybeDataCompatibleOpaqueVersion(QImage::Format format)
Definition qimage_p.h:330
int qt_depthForFormat(QImage::Format format)
Definition qimage_p.h:146
void convert_generic(QImageData *dest, const QImageData *src, Qt::ImageConversionFlags)
QColorSpace::ColorModel qt_csColorData(QPixelFormat::ColorModel format)
Definition qimage_p.h:444
bool qt_fpColorPrecision(QImage::Format format)
Definition qimage_p.h:428
QImage::Format qt_alphaVersion(QImage::Format format)
Definition qimage_p.h:271
bool qt_compatibleColorModelTarget(QPixelFormat::ColorModel data, QColorSpace::ColorModel cs, QColorSpace::TransformModel tm)
Definition qimage_p.h:487
void(*) Image_Converter(QImageData *dest, const QImageData *src, Qt::ImageConversionFlags)
Definition qimage_p.h:123
Q_GUI_EXPORT bool qt_xForm_helper(const QTransform &trueMat, int xoffset, int type, int depth, uchar *dptr, qsizetype dbpl, int p_inc, int dHeight, const uchar *sptr, qsizetype sbpl, int sWidth, int sHeight)
Definition qimage.cpp:4490
void dither_to_Mono(QImageData *dst, const QImageData *src, Qt::ImageConversionFlags flags, bool fromalpha)
void convert_generic_over_rgb64(QImageData *dest, const QImageData *src, Qt::ImageConversionFlags)
bool qt_highColorPrecision(QImage::Format format, bool opaque=false)
Definition qimage_p.h:400
QImage::Format qt_opaqueVersionForPainting(QImage::Format format)
Definition qimage_p.h:554
bool qt_compatibleColorModelBase(QPixelFormat::ColorModel data, QColorSpace::ColorModel cs)
Definition qimage_p.h:463
bool(*) InPlace_Image_Converter(QImageData *data, Qt::ImageConversionFlags)
Definition qimage_p.h:124
QImage::Format qt_maybeDataCompatibleAlphaVersion(QImage::Format format)
Definition qimage_p.h:498
Q_GUI_EXPORT void qGamma_correct_back_to_linear_cs(QImage *image)
QImage::Format qt_opaqueVersion(QImage::Format format)
Definition qimage_p.h:213
constexpr QImage::Format qt_toPremultipliedFormat(QImage::Format format)
Definition qimage_p.h:393
QImage::Format qt_alphaVersionForPainting(QImage::Format format)
Definition qimage_p.h:563
bool convert_generic_inplace(QImageData *data, QImage::Format dst_format, Qt::ImageConversionFlags)
bool qt_compatibleColorModelSource(QPixelFormat::ColorModel data, QColorSpace::ColorModel cs)
Definition qimage_p.h:476
#define Q_LOGGING_CATEGORY(name,...)
int detach_no
Definition qimage_p.h:56
qreal dpmx
Definition qimage_p.h:58
static QImageData * create(const QSize &size, QImage::Format format)
bool checkForAlphaPixels() const
Definition qimage.cpp:178
static const QImageData * get(const QImage &img) noexcept
Definition qimage_p.h:42
qreal devicePixelRatio
Definition qimage_p.h:50
bool doImageIO(const QImage *image, QImageWriter *io, int quality) const
Definition qimage.cpp:3995
QAtomicInt ref
Definition qimage_p.h:44
int height
Definition qimage_p.h:47
static QImageData * get(QImage &img) noexcept
Definition qimage_p.h:41
static bool isWithinIOAllocationLimit(int width, int height, QImage::Format format, const char *context=nullptr)
Definition qimage.cpp:4009
QColorSpace colorSpace
Definition qimage_p.h:82
static ImageSizeParameters calculateImageParameters(qsizetype width, qsizetype height, qsizetype depth)
Definition qimage_p.h:95
int ser_no
Definition qimage_p.h:55
static QImageData * create(uchar *data, int w, int h, qsizetype bpl, QImage::Format format, bool readOnly, QImageCleanupFunction cleanupFunction=nullptr, void *cleanupInfo=nullptr)
Definition qimage.cpp:838
uint is_cached
Definition qimage_p.h:65
int width
Definition qimage_p.h:46
bool convertInPlace(QImage::Format newFormat, Qt::ImageConversionFlags)
Definition qimage.cpp:5984
void * cleanupInfo
Definition qimage_p.h:68
QList< QRgb > colortable
Definition qimage_p.h:51
uint ro_data
Definition qimage_p.h:63
uint own_data
Definition qimage_p.h:62
qsizetype bytes_per_line
Definition qimage_p.h:54
qsizetype nbytes
Definition qimage_p.h:49
qreal dpmy
Definition qimage_p.h:59
int depth
Definition qimage_p.h:48
uint has_alpha_clut
Definition qimage_p.h:64
QPaintEngine * paintEngine
Definition qimage_p.h:80
QImage::Format format
Definition qimage_p.h:53
QMap< QString, QString > text
Definition qimage_p.h:76
QPoint offset
Definition qimage_p.h:60
QImageCleanupFunction cleanupFunction
Definition qimage_p.h:67