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};
91
92inline QImageData::ImageSizeParameters
93QImageData::calculateImageParameters(qsizetype width, qsizetype height, qsizetype depth)
94{
95 ImageSizeParameters invalid = { -1, -1 };
96 if (height <= 0)
97 return invalid;
98
99 // calculate the size, taking care of overflows
100 qsizetype bytes_per_line;
101 if (qMulOverflow(width, depth, &bytes_per_line))
102 return invalid;
103 if (qAddOverflow(bytes_per_line, qsizetype(31), &bytes_per_line))
104 return invalid;
105 // bytes per scanline (must be multiple of 4)
106 bytes_per_line = (bytes_per_line >> 5) << 2; // can't overflow
107
108 qsizetype total_size;
109 if (qMulOverflow(height, bytes_per_line, &total_size))
110 return invalid;
111 qsizetype dummy;
112 if (qMulOverflow(height, qsizetype(sizeof(uchar *)), &dummy))
113 return invalid; // why is this here?
114 // Disallow images where width * depth calculations might overflow
115 if (width > (INT_MAX - 31) / depth)
116 return invalid;
117
118 return { bytes_per_line, total_size };
119}
120
121typedef void (*Image_Converter)(QImageData *dest, const QImageData *src, Qt::ImageConversionFlags);
122typedef bool (*InPlace_Image_Converter)(QImageData *data, Qt::ImageConversionFlags);
123
124extern Image_Converter qimage_converter_map[QImage::NImageFormats][QImage::NImageFormats];
125extern InPlace_Image_Converter qimage_inplace_converter_map[QImage::NImageFormats][QImage::NImageFormats];
126
127void convert_generic(QImageData *dest, const QImageData *src, Qt::ImageConversionFlags);
128void convert_generic_over_rgb64(QImageData *dest, const QImageData *src, Qt::ImageConversionFlags);
129bool convert_generic_inplace(QImageData *data, QImage::Format dst_format, Qt::ImageConversionFlags);
130bool convert_generic_inplace_over_rgb64(QImageData *data, QImage::Format dst_format, Qt::ImageConversionFlags);
131#if QT_CONFIG(raster_fp)
132void convert_generic_over_rgba32f(QImageData *dest, const QImageData *src, Qt::ImageConversionFlags);
133bool convert_generic_inplace_over_rgba32f(QImageData *data, QImage::Format dst_format, Qt::ImageConversionFlags);
134#endif
135
136void dither_to_Mono(QImageData *dst, const QImageData *src, Qt::ImageConversionFlags flags, bool fromalpha);
137
139Q_GUI_EXPORT void qGamma_correct_back_to_linear_cs(QImage *image);
140
141#if defined(_M_ARM) && defined(_MSC_VER) // QTBUG-42038
142#pragma optimize("", off)
143#endif
144inline int qt_depthForFormat(QImage::Format format)
145{
146 int depth = 0;
147 switch(format) {
148 case QImage::Format_Invalid:
149 case QImage::NImageFormats:
150 Q_UNREACHABLE();
151 case QImage::Format_Mono:
152 case QImage::Format_MonoLSB:
153 depth = 1;
154 break;
155 case QImage::Format_Indexed8:
156 case QImage::Format_Alpha8:
157 case QImage::Format_Grayscale8:
158 depth = 8;
159 break;
160 case QImage::Format_RGB32:
161 case QImage::Format_ARGB32:
162 case QImage::Format_ARGB32_Premultiplied:
163 case QImage::Format_RGBX8888:
164 case QImage::Format_RGBA8888:
165 case QImage::Format_RGBA8888_Premultiplied:
166 case QImage::Format_BGR30:
167 case QImage::Format_A2BGR30_Premultiplied:
168 case QImage::Format_RGB30:
169 case QImage::Format_A2RGB30_Premultiplied:
170 depth = 32;
171 break;
172 case QImage::Format_RGB555:
173 case QImage::Format_RGB16:
174 case QImage::Format_RGB444:
175 case QImage::Format_ARGB4444_Premultiplied:
176 case QImage::Format_Grayscale16:
177 depth = 16;
178 break;
179 case QImage::Format_RGB666:
180 case QImage::Format_ARGB6666_Premultiplied:
181 case QImage::Format_ARGB8565_Premultiplied:
182 case QImage::Format_ARGB8555_Premultiplied:
183 case QImage::Format_RGB888:
184 case QImage::Format_BGR888:
185 depth = 24;
186 break;
187 case QImage::Format_RGBX64:
188 case QImage::Format_RGBA64:
189 case QImage::Format_RGBA64_Premultiplied:
190 case QImage::Format_RGBX16FPx4:
191 case QImage::Format_RGBA16FPx4:
192 case QImage::Format_RGBA16FPx4_Premultiplied:
193 depth = 64;
194 break;
195 case QImage::Format_RGBX32FPx4:
196 case QImage::Format_RGBA32FPx4:
197 case QImage::Format_RGBA32FPx4_Premultiplied:
198 depth = 128;
199 break;
200 case QImage::Format_CMYK8888:
201 depth = 32;
202 break;
203 }
204 return depth;
205}
206
207#if defined(_M_ARM) && defined(_MSC_VER)
208#pragma optimize("", on)
209#endif
210
211inline QImage::Format qt_opaqueVersion(QImage::Format format)
212{
213 switch (format) {
214 case QImage::Format_ARGB8565_Premultiplied:
215 return QImage::Format_RGB16;
216 case QImage::Format_ARGB8555_Premultiplied:
217 return QImage::Format_RGB555;
218 case QImage::Format_ARGB6666_Premultiplied:
219 return QImage::Format_RGB666;
220 case QImage::Format_ARGB4444_Premultiplied:
221 return QImage::Format_RGB444;
222 case QImage::Format_RGBA8888:
223 case QImage::Format_RGBA8888_Premultiplied:
224 return QImage::Format_RGBX8888;
225 case QImage::Format_A2BGR30_Premultiplied:
226 return QImage::Format_BGR30;
227 case QImage::Format_A2RGB30_Premultiplied:
228 return QImage::Format_RGB30;
229 case QImage::Format_RGBA64:
230 case QImage::Format_RGBA64_Premultiplied:
231 return QImage::Format_RGBX64;
232 case QImage::Format_RGBA16FPx4:
233 case QImage::Format_RGBA16FPx4_Premultiplied:
234 return QImage::Format_RGBX16FPx4;
235 case QImage::Format_RGBA32FPx4:
236 case QImage::Format_RGBA32FPx4_Premultiplied:
237 return QImage::Format_RGBX32FPx4;
238 case QImage::Format_ARGB32_Premultiplied:
239 case QImage::Format_ARGB32:
240 return QImage::Format_RGB32;
241 case QImage::Format_RGB16:
242 case QImage::Format_RGB32:
243 case QImage::Format_RGB444:
244 case QImage::Format_RGB555:
245 case QImage::Format_RGB666:
246 case QImage::Format_RGB888:
247 case QImage::Format_BGR888:
248 case QImage::Format_RGBX8888:
249 case QImage::Format_BGR30:
250 case QImage::Format_RGB30:
251 case QImage::Format_RGBX64:
252 case QImage::Format_RGBX16FPx4:
253 case QImage::Format_RGBX32FPx4:
254 case QImage::Format_Grayscale8:
255 case QImage::Format_Grayscale16:
256 case QImage::Format_CMYK8888:
257 return format;
258 case QImage::Format_Mono:
259 case QImage::Format_MonoLSB:
260 case QImage::Format_Indexed8:
261 case QImage::Format_Alpha8:
262 case QImage::Format_Invalid:
263 case QImage::NImageFormats:
264 break;
265 }
266 return QImage::Format_RGB32;
267}
268
269inline QImage::Format qt_alphaVersion(QImage::Format format)
270{
271 switch (format) {
272 case QImage::Format_RGB32:
273 case QImage::Format_ARGB32:
274 return QImage::Format_ARGB32_Premultiplied;
275 case QImage::Format_RGB16:
276 return QImage::Format_ARGB8565_Premultiplied;
277 case QImage::Format_RGB555:
278 return QImage::Format_ARGB8555_Premultiplied;
279 case QImage::Format_RGB666:
280 return QImage::Format_ARGB6666_Premultiplied;
281 case QImage::Format_RGB444:
282 return QImage::Format_ARGB4444_Premultiplied;
283 case QImage::Format_RGBX8888:
284 case QImage::Format_RGBA8888:
285 return QImage::Format_RGBA8888_Premultiplied;
286 case QImage::Format_BGR30:
287 return QImage::Format_A2BGR30_Premultiplied;
288 case QImage::Format_RGB30:
289 return QImage::Format_A2RGB30_Premultiplied;
290 case QImage::Format_RGBX64:
291 case QImage::Format_RGBA64:
292 case QImage::Format_Grayscale16:
293 return QImage::Format_RGBA64_Premultiplied;
294 case QImage::Format_RGBX16FPx4:
295 case QImage::Format_RGBA16FPx4:
296 return QImage::Format_RGBA16FPx4_Premultiplied;
297 case QImage::Format_RGBX32FPx4:
298 case QImage::Format_RGBA32FPx4:
299 return QImage::Format_RGBA32FPx4_Premultiplied;
300 case QImage::Format_ARGB32_Premultiplied:
301 case QImage::Format_ARGB8565_Premultiplied:
302 case QImage::Format_ARGB8555_Premultiplied:
303 case QImage::Format_ARGB6666_Premultiplied:
304 case QImage::Format_ARGB4444_Premultiplied:
305 case QImage::Format_RGBA8888_Premultiplied:
306 case QImage::Format_A2BGR30_Premultiplied:
307 case QImage::Format_A2RGB30_Premultiplied:
308 case QImage::Format_RGBA64_Premultiplied:
309 case QImage::Format_RGBA16FPx4_Premultiplied:
310 case QImage::Format_RGBA32FPx4_Premultiplied:
311 return format;
312 case QImage::Format_Mono:
313 case QImage::Format_MonoLSB:
314 case QImage::Format_Indexed8:
315 case QImage::Format_RGB888:
316 case QImage::Format_BGR888:
317 case QImage::Format_Alpha8:
318 case QImage::Format_Grayscale8:
319 case QImage::Format_Invalid:
320 case QImage::Format_CMYK8888:
321 case QImage::NImageFormats:
322 break;
323 }
324 return QImage::Format_ARGB32_Premultiplied;
325}
326
327// Returns an opaque version that is compatible with format
329{
330 switch (format) {
331 case QImage::Format_ARGB6666_Premultiplied:
332 return QImage::Format_RGB666;
333 case QImage::Format_ARGB4444_Premultiplied:
334 return QImage::Format_RGB444;
335 case QImage::Format_RGBA8888:
336 case QImage::Format_RGBA8888_Premultiplied:
337 return QImage::Format_RGBX8888;
338 case QImage::Format_A2BGR30_Premultiplied:
339 return QImage::Format_BGR30;
340 case QImage::Format_A2RGB30_Premultiplied:
341 return QImage::Format_RGB30;
342 case QImage::Format_RGBA64:
343 case QImage::Format_RGBA64_Premultiplied:
344 return QImage::Format_RGBX64;
345 case QImage::Format_RGBA16FPx4:
346 case QImage::Format_RGBA16FPx4_Premultiplied:
347 return QImage::Format_RGBX16FPx4;
348 case QImage::Format_RGBA32FPx4:
349 case QImage::Format_RGBA32FPx4_Premultiplied:
350 return QImage::Format_RGBX32FPx4;
351 case QImage::Format_ARGB32_Premultiplied:
352 case QImage::Format_ARGB32:
353 return QImage::Format_RGB32;
354 case QImage::Format_RGB16:
355 case QImage::Format_RGB32:
356 case QImage::Format_RGB444:
357 case QImage::Format_RGB555:
358 case QImage::Format_RGB666:
359 case QImage::Format_RGB888:
360 case QImage::Format_BGR888:
361 case QImage::Format_RGBX8888:
362 case QImage::Format_BGR30:
363 case QImage::Format_RGB30:
364 case QImage::Format_RGBX64:
365 case QImage::Format_RGBX16FPx4:
366 case QImage::Format_RGBX32FPx4:
367 case QImage::Format_Grayscale8:
368 case QImage::Format_Grayscale16:
369 case QImage::Format_CMYK8888:
370 return format; // Already opaque
371 case QImage::Format_Mono:
372 case QImage::Format_MonoLSB:
373 case QImage::Format_Indexed8:
374 case QImage::Format_ARGB8565_Premultiplied:
375 case QImage::Format_ARGB8555_Premultiplied:
376 case QImage::Format_Alpha8:
377 case QImage::Format_Invalid:
378 case QImage::NImageFormats:
379 break;
380 }
381 return format; // No compatible opaque versions
382}
383
384constexpr QImage::Format qt_toUnpremultipliedFormat(QImage::Format format)
385{
386 // Assumes input is already a premultiplied format with an unpremultiplied counterpart
387 // This abuses the fact unpremultiplied formats are always before their premultiplied counterparts.
388 return static_cast<QImage::Format>(qToUnderlying(format) - 1);
389}
390
391constexpr QImage::Format qt_toPremultipliedFormat(QImage::Format format)
392{
393 // Assumes input is already an unpremultiplied format
394 // This abuses the fact unpremultiplied formats are always before their premultiplied counterparts.
395 return static_cast<QImage::Format>(qToUnderlying(format) + 1);
396}
397
398inline bool qt_highColorPrecision(QImage::Format format, bool opaque = false)
399{
400 // Formats with higher color precision than ARGB32_Premultiplied.
401 switch (format) {
402 case QImage::Format_ARGB32:
403 case QImage::Format_RGBA8888:
404 return !opaque;
405 case QImage::Format_BGR30:
406 case QImage::Format_RGB30:
407 case QImage::Format_A2BGR30_Premultiplied:
408 case QImage::Format_A2RGB30_Premultiplied:
409 case QImage::Format_RGBX64:
410 case QImage::Format_RGBA64:
411 case QImage::Format_RGBA64_Premultiplied:
412 case QImage::Format_Grayscale16:
413 case QImage::Format_RGBX16FPx4:
414 case QImage::Format_RGBA16FPx4:
415 case QImage::Format_RGBA16FPx4_Premultiplied:
416 case QImage::Format_RGBX32FPx4:
417 case QImage::Format_RGBA32FPx4:
418 case QImage::Format_RGBA32FPx4_Premultiplied:
419 return true;
420 default:
421 break;
422 }
423 return false;
424}
425
426inline bool qt_fpColorPrecision(QImage::Format format)
427{
428 switch (format) {
429 case QImage::Format_RGBX16FPx4:
430 case QImage::Format_RGBA16FPx4:
431 case QImage::Format_RGBA16FPx4_Premultiplied:
432 case QImage::Format_RGBX32FPx4:
433 case QImage::Format_RGBA32FPx4:
434 case QImage::Format_RGBA32FPx4_Premultiplied:
435 return true;
436 default:
437 break;
438 }
439 return false;
440}
441
442inline QColorSpace::ColorModel qt_csColorData(QPixelFormat::ColorModel format)
443{
444 switch (format) {
445 case QPixelFormat::ColorModel::RGB:
446 case QPixelFormat::ColorModel::BGR:
447 case QPixelFormat::ColorModel::Indexed:
448 return QColorSpace::ColorModel::Rgb;
449 case QPixelFormat::ColorModel::Alpha:
450 return QColorSpace::ColorModel::Undefined; // No valid colors
451 case QPixelFormat::ColorModel::Grayscale:
452 return QColorSpace::ColorModel::Gray;
453 case QPixelFormat::ColorModel::CMYK:
454 return QColorSpace::ColorModel::Cmyk;
455 default:
456 break;
457 }
458 return QColorSpace::ColorModel::Undefined;
459}
460
461inline bool qt_compatibleColorModelBase(QPixelFormat::ColorModel data, QColorSpace::ColorModel cs)
462{
463 QColorSpace::ColorModel dataCs = qt_csColorData(data);
464
465 if (data == QPixelFormat::ColorModel::Alpha)
466 return true; // Alpha data has no colors and can be handled by any color space
467
468 if (cs == QColorSpace::ColorModel::Undefined || dataCs == QColorSpace::ColorModel::Undefined)
469 return false;
470
471 return (dataCs == cs); // Matching color models
472}
473
474inline bool qt_compatibleColorModelSource(QPixelFormat::ColorModel data, QColorSpace::ColorModel cs)
475{
476 if (qt_compatibleColorModelBase(data, cs))
477 return true;
478
479 if (data == QPixelFormat::ColorModel::Grayscale && cs == QColorSpace::ColorModel::Rgb)
480 return true; // Can apply Rgb CS to Gray input data
481
482 return false;
483}
484
485inline bool qt_compatibleColorModelTarget(QPixelFormat::ColorModel data, QColorSpace::ColorModel cs, QColorSpace::TransformModel tm)
486{
487 if (qt_compatibleColorModelBase(data, cs))
488 return true;
489
490 if (data == QPixelFormat::ColorModel::Grayscale && tm == QColorSpace::TransformModel::ThreeComponentMatrix)
491 return true; // Can apply three-component matrix CS to gray output
492
493 return false;
494}
495
497{
498 switch (format) {
499 case QImage::Format_RGB32:
500 return QImage::Format_ARGB32_Premultiplied;
501 case QImage::Format_RGB666:
502 return QImage::Format_ARGB6666_Premultiplied;
503 case QImage::Format_RGB444:
504 return QImage::Format_ARGB4444_Premultiplied;
505 case QImage::Format_RGBX8888:
506 return QImage::Format_RGBA8888_Premultiplied;
507 case QImage::Format_BGR30:
508 return QImage::Format_A2BGR30_Premultiplied;
509 case QImage::Format_RGB30:
510 return QImage::Format_A2RGB30_Premultiplied;
511 case QImage::Format_RGBX64:
512 return QImage::Format_RGBA64_Premultiplied;
513 case QImage::Format_RGBX16FPx4:
514 return QImage::Format_RGBA16FPx4_Premultiplied;
515 case QImage::Format_RGBX32FPx4:
516 return QImage::Format_RGBA32FPx4_Premultiplied;
517 case QImage::Format_ARGB32:
518 case QImage::Format_ARGB32_Premultiplied:
519 case QImage::Format_ARGB8565_Premultiplied:
520 case QImage::Format_ARGB8555_Premultiplied:
521 case QImage::Format_ARGB6666_Premultiplied:
522 case QImage::Format_ARGB4444_Premultiplied:
523 case QImage::Format_RGBA8888:
524 case QImage::Format_RGBA8888_Premultiplied:
525 case QImage::Format_A2BGR30_Premultiplied:
526 case QImage::Format_A2RGB30_Premultiplied:
527 case QImage::Format_Alpha8:
528 case QImage::Format_RGBA64:
529 case QImage::Format_RGBA64_Premultiplied:
530 case QImage::Format_RGBA16FPx4:
531 case QImage::Format_RGBA16FPx4_Premultiplied:
532 case QImage::Format_RGBA32FPx4:
533 case QImage::Format_RGBA32FPx4_Premultiplied:
534 return format; // Already alpha versions
535 case QImage::Format_Mono:
536 case QImage::Format_MonoLSB:
537 case QImage::Format_Indexed8:
538 case QImage::Format_RGB16:
539 case QImage::Format_RGB555:
540 case QImage::Format_RGB888:
541 case QImage::Format_BGR888:
542 case QImage::Format_Grayscale8:
543 case QImage::Format_Grayscale16:
544 case QImage::Format_CMYK8888:
545 case QImage::Format_Invalid:
546 case QImage::NImageFormats:
547 break;
548 }
549 return format; // No data-compatible alpha version
550}
551
552inline QImage::Format qt_opaqueVersionForPainting(QImage::Format format)
553{
554 QImage::Format toFormat = qt_opaqueVersion(format);
555 // If we are switching depth anyway upgrade to RGB32
556 if (qt_depthForFormat(format) != qt_depthForFormat(toFormat) && qt_depthForFormat(toFormat) <= 32)
557 toFormat = QImage::Format_RGB32;
558 return toFormat;
559}
560
561inline QImage::Format qt_alphaVersionForPainting(QImage::Format format)
562{
563 QImage::Format toFormat = qt_alphaVersion(format);
564#if defined(__ARM_NEON__) || defined(__SSE2__) || defined(QT_COMPILER_SUPPORT_LSX)
565 // If we are switching depth anyway and we have optimized ARGB32PM routines, upgrade to that.
566 if (qt_depthForFormat(format) != qt_depthForFormat(toFormat) && qt_depthForFormat(toFormat) <= 32)
567 toFormat = QImage::Format_ARGB32_Premultiplied;
568#endif
569 return toFormat;
570}
571
572Q_GUI_EXPORT QMap<QString, QString> qt_getImageText(const QImage &image, const QString &description);
573Q_GUI_EXPORT QMap<QString, QString> qt_getImageTextFromDescription(const QString &description);
574
575QT_END_NAMESPACE
576
577#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:384
QImage::Format qt_maybeDataCompatibleOpaqueVersion(QImage::Format format)
Definition qimage_p.h:328
int qt_depthForFormat(QImage::Format format)
Definition qimage_p.h:144
void convert_generic(QImageData *dest, const QImageData *src, Qt::ImageConversionFlags)
QColorSpace::ColorModel qt_csColorData(QPixelFormat::ColorModel format)
Definition qimage_p.h:442
bool qt_fpColorPrecision(QImage::Format format)
Definition qimage_p.h:426
bool(* InPlace_Image_Converter)(QImageData *data, Qt::ImageConversionFlags)
Definition qimage_p.h:122
QImage::Format qt_alphaVersion(QImage::Format format)
Definition qimage_p.h:269
bool qt_compatibleColorModelTarget(QPixelFormat::ColorModel data, QColorSpace::ColorModel cs, QColorSpace::TransformModel tm)
Definition qimage_p.h:485
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:398
QImage::Format qt_opaqueVersionForPainting(QImage::Format format)
Definition qimage_p.h:552
bool qt_compatibleColorModelBase(QPixelFormat::ColorModel data, QColorSpace::ColorModel cs)
Definition qimage_p.h:461
QImage::Format qt_maybeDataCompatibleAlphaVersion(QImage::Format format)
Definition qimage_p.h:496
Q_GUI_EXPORT void qGamma_correct_back_to_linear_cs(QImage *image)
QImage::Format qt_opaqueVersion(QImage::Format format)
Definition qimage_p.h:211
void(* Image_Converter)(QImageData *dest, const QImageData *src, Qt::ImageConversionFlags)
Definition qimage_p.h:121
constexpr QImage::Format qt_toPremultipliedFormat(QImage::Format format)
Definition qimage_p.h:391
QImage::Format qt_alphaVersionForPainting(QImage::Format format)
Definition qimage_p.h:561
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:474
#define Q_LOGGING_CATEGORY(name,...)
#define qCWarning(category,...)
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:3983
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
QColorSpace colorSpace
Definition qimage_p.h:82
static ImageSizeParameters calculateImageParameters(qsizetype width, qsizetype height, qsizetype depth)
Definition qimage_p.h:93
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:5945
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