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