1 /****************************************************************************
2 **
3 ** Copyright (C) 2015 The Qt Company Ltd.
4 ** Contact: http://www.qt.io/licensing/
5 **
6 ** This file is part of the QtGui module of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and The Qt Company. For licensing terms
14 ** and conditions see http://www.qt.io/terms-conditions. For further
15 ** information use the contact form at http://www.qt.io/contact-us.
16 **
17 ** GNU Lesser General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 2.1 or version 3 as published by the Free
20 ** Software Foundation and appearing in the file LICENSE.LGPLv21 and
21 ** LICENSE.LGPLv3 included in the packaging of this file. Please review the
22 ** following information to ensure the GNU Lesser General Public License
23 ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
24 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
25 **
26 ** As a special exception, The Qt Company gives you certain additional
27 ** rights. These rights are described in The Qt Company LGPL Exception
28 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
29 **
30 ** GNU General Public License Usage
31 ** Alternatively, this file may be used under the terms of the GNU
32 ** General Public License version 3.0 as published by the Free Software
33 ** Foundation and appearing in the file LICENSE.GPL included in the
34 ** packaging of this file. Please review the following information to
35 ** ensure the GNU General Public License version 3.0 requirements will be
36 ** met: http://www.gnu.org/copyleft/gpl.html.
37 **
38 ** $QT_END_LICENSE$
39 **
40 ****************************************************************************/
41
42 #include <qmath.h>
43 #include "qblendfunctions_p.h"
44
45 QT_BEGIN_NAMESPACE
46
47 struct SourceOnlyAlpha
48 {
alphaSourceOnlyAlpha49 inline uchar alpha(uchar src) const { return src; }
bytemulSourceOnlyAlpha50 inline quint16 bytemul(quint16 spix) const { return spix; }
51 };
52
53
54 struct SourceAndConstAlpha
55 {
SourceAndConstAlphaSourceAndConstAlpha56 SourceAndConstAlpha(int a) : m_alpha256(a) {
57 m_alpha255 = (m_alpha256 * 255) >> 8;
58 };
alphaSourceAndConstAlpha59 inline uchar alpha(uchar src) const { return (src * m_alpha256) >> 8; }
bytemulSourceAndConstAlpha60 inline quint16 bytemul(quint16 x) const {
61 uint t = (((x & 0x07e0)*m_alpha255) >> 8) & 0x07e0;
62 t |= (((x & 0xf81f)*(m_alpha255>>2)) >> 6) & 0xf81f;
63 return t;
64 }
65 int m_alpha255;
66 int m_alpha256;
67 };
68
69
70 /************************************************************************
71 RGB16 (565) format target format
72 ************************************************************************/
73
convert_argb32_to_rgb16(quint32 spix)74 static inline quint16 convert_argb32_to_rgb16(quint32 spix)
75 {
76 quint32 b = spix;
77 quint32 g = spix;
78 b >>= 8;
79 g >>= 5;
80 b &= 0x0000f800;
81 g &= 0x000007e0;
82 spix >>= 3;
83 b |= g;
84 spix &= 0x0000001f;
85 b |= spix;
86 return b;
87 }
88
89 struct Blend_RGB16_on_RGB16_NoAlpha {
writeBlend_RGB16_on_RGB16_NoAlpha90 inline void write(quint16 *dst, quint16 src) { *dst = src; }
91
flushBlend_RGB16_on_RGB16_NoAlpha92 inline void flush(void *) {}
93 };
94
95 struct Blend_RGB16_on_RGB16_ConstAlpha {
Blend_RGB16_on_RGB16_ConstAlphaBlend_RGB16_on_RGB16_ConstAlpha96 inline Blend_RGB16_on_RGB16_ConstAlpha(quint32 alpha) {
97 m_alpha = (alpha * 255) >> 8;
98 m_ialpha = 255 - m_alpha;
99 }
100
writeBlend_RGB16_on_RGB16_ConstAlpha101 inline void write(quint16 *dst, quint16 src) {
102 *dst = BYTE_MUL_RGB16(src, m_alpha) + BYTE_MUL_RGB16(*dst, m_ialpha);
103 }
104
flushBlend_RGB16_on_RGB16_ConstAlpha105 inline void flush(void *) {}
106
107 quint32 m_alpha;
108 quint32 m_ialpha;
109 };
110
111 struct Blend_ARGB24_on_RGB16_SourceAlpha {
writeBlend_ARGB24_on_RGB16_SourceAlpha112 inline void write(quint16 *dst, const qargb8565 &src) {
113 const uint alpha = src.alpha();
114 if (alpha) {
115 quint16 s = src.rawValue16();
116 if (alpha < 255)
117 s += BYTE_MUL_RGB16(*dst, 255 - alpha);
118 *dst = s;
119 }
120 }
121
flushBlend_ARGB24_on_RGB16_SourceAlpha122 inline void flush(void *) {}
123 };
124
125 struct Blend_ARGB24_on_RGB16_SourceAndConstAlpha {
Blend_ARGB24_on_RGB16_SourceAndConstAlphaBlend_ARGB24_on_RGB16_SourceAndConstAlpha126 inline Blend_ARGB24_on_RGB16_SourceAndConstAlpha(quint32 alpha) {
127 m_alpha = (alpha * 255) >> 8;
128 }
129
writeBlend_ARGB24_on_RGB16_SourceAndConstAlpha130 inline void write(quint16 *dst, qargb8565 src) {
131 src = src.byte_mul(src.alpha(m_alpha));
132 const uint alpha = src.alpha();
133 if (alpha) {
134 quint16 s = src.rawValue16();
135 if (alpha < 255)
136 s += BYTE_MUL_RGB16(*dst, 255 - alpha);
137 *dst = s;
138 }
139 }
140
flushBlend_ARGB24_on_RGB16_SourceAndConstAlpha141 inline void flush(void *) {}
142
143 quint32 m_alpha;
144 };
145
146 struct Blend_ARGB32_on_RGB16_SourceAlpha {
writeBlend_ARGB32_on_RGB16_SourceAlpha147 inline void write(quint16 *dst, quint32 src) {
148 const quint8 alpha = qAlpha(src);
149 if(alpha) {
150 quint16 s = convert_argb32_to_rgb16(src);
151 if(alpha < 255)
152 s += BYTE_MUL_RGB16(*dst, 255 - alpha);
153 *dst = s;
154 }
155 }
156
flushBlend_ARGB32_on_RGB16_SourceAlpha157 inline void flush(void *) {}
158 };
159
160 struct Blend_ARGB32_on_RGB16_SourceAndConstAlpha {
Blend_ARGB32_on_RGB16_SourceAndConstAlphaBlend_ARGB32_on_RGB16_SourceAndConstAlpha161 inline Blend_ARGB32_on_RGB16_SourceAndConstAlpha(quint32 alpha) {
162 m_alpha = (alpha * 255) >> 8;
163 }
164
writeBlend_ARGB32_on_RGB16_SourceAndConstAlpha165 inline void write(quint16 *dst, quint32 src) {
166 src = BYTE_MUL(src, m_alpha);
167 const quint8 alpha = qAlpha(src);
168 if(alpha) {
169 quint16 s = convert_argb32_to_rgb16(src);
170 if(alpha < 255)
171 s += BYTE_MUL_RGB16(*dst, 255 - alpha);
172 *dst = s;
173 }
174 }
175
flushBlend_ARGB32_on_RGB16_SourceAndConstAlpha176 inline void flush(void *) {}
177
178 quint32 m_alpha;
179 };
180
qt_scale_image_rgb16_on_rgb16(uchar * destPixels,int dbpl,const uchar * srcPixels,int sbpl,int sh,const QRectF & targetRect,const QRectF & sourceRect,const QRect & clip,int const_alpha)181 void qt_scale_image_rgb16_on_rgb16(uchar *destPixels, int dbpl,
182 const uchar *srcPixels, int sbpl, int sh,
183 const QRectF &targetRect,
184 const QRectF &sourceRect,
185 const QRect &clip,
186 int const_alpha)
187 {
188 #ifdef QT_DEBUG_DRAW
189 printf("qt_scale_rgb16_on_rgb16: dst=(%p, %d), src=(%p, %d), target=(%d, %d), [%d x %d], src=(%d, %d) [%d x %d] alpha=%d\n",
190 destPixels, dbpl, srcPixels, sbpl,
191 targetRect.x(), targetRect.y(), targetRect.width(), targetRect.height(),
192 sourceRect.x(), sourceRect.y(), sourceRect.width(), sourceRect.height(),
193 const_alpha);
194 #endif
195 if (const_alpha == 256) {
196 Blend_RGB16_on_RGB16_NoAlpha noAlpha;
197 qt_scale_image_16bit<quint16>(destPixels, dbpl, srcPixels, sbpl, sh,
198 targetRect, sourceRect, clip, noAlpha);
199 } else {
200 Blend_RGB16_on_RGB16_ConstAlpha constAlpha(const_alpha);
201 qt_scale_image_16bit<quint16>(destPixels, dbpl, srcPixels, sbpl, sh,
202 targetRect, sourceRect, clip, constAlpha);
203 }
204 }
205
qt_scale_image_argb24_on_rgb16(uchar * destPixels,int dbpl,const uchar * srcPixels,int sbpl,int sh,const QRectF & targetRect,const QRectF & sourceRect,const QRect & clip,int const_alpha)206 void qt_scale_image_argb24_on_rgb16(uchar *destPixels, int dbpl,
207 const uchar *srcPixels, int sbpl, int sh,
208 const QRectF &targetRect,
209 const QRectF &sourceRect,
210 const QRect &clip,
211 int const_alpha)
212 {
213 #ifdef QT_DEBUG_DRAW
214 printf("qt_scale_argb24_on_rgb16: dst=(%p, %d), src=(%p, %d), target=(%d, %d), [%d x %d], src=(%d, %d) [%d x %d] alpha=%d\n",
215 destPixels, dbpl, srcPixels, sbpl,
216 targetRect.x(), targetRect.y(), targetRect.width(), targetRect.height(),
217 sourceRect.x(), sourceRect.y(), sourceRect.width(), sourceRect.height(),
218 const_alpha);
219 #endif
220 if (const_alpha == 256) {
221 Blend_ARGB24_on_RGB16_SourceAlpha noAlpha;
222 qt_scale_image_16bit<qargb8565>(destPixels, dbpl, srcPixels, sbpl, sh,
223 targetRect, sourceRect, clip, noAlpha);
224 } else {
225 Blend_ARGB24_on_RGB16_SourceAndConstAlpha constAlpha(const_alpha);
226 qt_scale_image_16bit<qargb8565>(destPixels, dbpl, srcPixels, sbpl, sh,
227 targetRect, sourceRect, clip, constAlpha);
228 }
229 }
230
231
qt_scale_image_argb32_on_rgb16(uchar * destPixels,int dbpl,const uchar * srcPixels,int sbpl,int sh,const QRectF & targetRect,const QRectF & sourceRect,const QRect & clip,int const_alpha)232 void qt_scale_image_argb32_on_rgb16(uchar *destPixels, int dbpl,
233 const uchar *srcPixels, int sbpl, int sh,
234 const QRectF &targetRect,
235 const QRectF &sourceRect,
236 const QRect &clip,
237 int const_alpha)
238 {
239 #ifdef QT_DEBUG_DRAW
240 printf("qt_scale_argb32_on_rgb16: dst=(%p, %d), src=(%p, %d), target=(%d, %d), [%d x %d], src=(%d, %d) [%d x %d] alpha=%d\n",
241 destPixels, dbpl, srcPixels, sbpl,
242 targetRect.x(), targetRect.y(), targetRect.width(), targetRect.height(),
243 sourceRect.x(), sourceRect.y(), sourceRect.width(), sourceRect.height(),
244 const_alpha);
245 #endif
246 if (const_alpha == 256) {
247 Blend_ARGB32_on_RGB16_SourceAlpha noAlpha;
248 qt_scale_image_16bit<quint32>(destPixels, dbpl, srcPixels, sbpl, sh,
249 targetRect, sourceRect, clip, noAlpha);
250 } else {
251 Blend_ARGB32_on_RGB16_SourceAndConstAlpha constAlpha(const_alpha);
252 qt_scale_image_16bit<quint32>(destPixels, dbpl, srcPixels, sbpl, sh,
253 targetRect, sourceRect, clip, constAlpha);
254 }
255 }
256
qt_blend_rgb16_on_rgb16(uchar * dst,int dbpl,const uchar * src,int sbpl,int w,int h,int const_alpha)257 void qt_blend_rgb16_on_rgb16(uchar *dst, int dbpl,
258 const uchar *src, int sbpl,
259 int w, int h,
260 int const_alpha)
261 {
262 #ifdef QT_DEBUG_DRAW
263 printf("qt_blend_rgb16_on_rgb16: dst=(%p, %d), src=(%p, %d), dim=(%d, %d) alpha=%d\n",
264 dst, dbpl, src, sbpl, w, h, const_alpha);
265 #endif
266
267 if (const_alpha == 256) {
268 if (w <= 64) {
269 while (h--) {
270 QT_MEMCPY_USHORT(dst, src, w);
271 dst += dbpl;
272 src += sbpl;
273 }
274 } else {
275 int length = w << 1;
276 while (h--) {
277 memcpy(dst, src, length);
278 dst += dbpl;
279 src += sbpl;
280 }
281 }
282 } else if (const_alpha != 0) {
283 SourceAndConstAlpha alpha(const_alpha); // expects the 0-256 range
284 quint16 *d = (quint16 *) dst;
285 const quint16 *s = (const quint16 *) src;
286 quint8 a = (255 * const_alpha) >> 8;
287 quint8 ia = 255 - a;
288 while (h--) {
289 for (int x=0; x<w; ++x) {
290 d[x] = BYTE_MUL_RGB16(s[x], a) + BYTE_MUL_RGB16(d[x], ia);
291 }
292 d = (quint16 *)(((uchar *) d) + dbpl);
293 s = (const quint16 *)(((const uchar *) s) + sbpl);
294 }
295 }
296 }
297
298
qt_blend_argb24_on_rgb16(uchar * destPixels,int dbpl,const uchar * srcPixels,int sbpl,int w,int h,const T & alphaFunc)299 template <typename T> void qt_blend_argb24_on_rgb16(uchar *destPixels, int dbpl,
300 const uchar *srcPixels, int sbpl,
301 int w, int h, const T &alphaFunc)
302 {
303 int srcOffset = w*3;
304 int dstJPL = dbpl / 2;
305 quint16 *dst = (quint16 *) destPixels;
306 int dstExtraStride = dstJPL - w;
307
308 for (int y=0; y<h; ++y) {
309 const uchar *src = srcPixels + y * sbpl;
310 const uchar *srcEnd = src + srcOffset;
311 while (src < srcEnd) {
312 #if defined(QT_ARCH_ARMV5) || defined(QT_ARCH_POWERPC) || defined(QT_ARCH_SH) || defined(QT_ARCH_AVR32) || (defined(QT_ARCH_WINDOWSCE) && !defined(_X86_)) || (defined(QT_ARCH_SPARC) && defined(Q_CC_GNU)) || (defined(QT_ARCH_INTEGRITY) && !defined(_X86_))
313 // non-16-bit aligned memory access is not possible on PowerPC,
314 // ARM <v6 (QT_ARCH_ARMV5) & SH & AVR32 & SPARC w/GCC
315 quint16 spix = (quint16(src[2])<<8) + src[1];
316 #else
317 quint16 spix = *(quint16 *) (src + 1);
318 #endif
319 uchar alpha = alphaFunc.alpha(*src);
320
321 if (alpha == 255) {
322 *dst = spix;
323 } else if (alpha != 0) {
324 quint16 dpix = *dst;
325 quint32 sia = 255 - alpha;
326
327 quint16 dr = (dpix & 0x0000f800);
328 quint16 dg = (dpix & 0x000007e0);
329 quint16 db = (dpix & 0x0000001f);
330
331 quint32 siar = dr * sia;
332 quint32 siag = dg * sia;
333 quint32 siab = db * sia;
334
335 quint32 rr = ((siar + (siar>>8) + (0x80 << 8)) >> 8) & 0xf800;
336 quint32 rg = ((siag + (siag>>8) + (0x80 << 3)) >> 8) & 0x07e0;
337 quint32 rb = ((siab + (siab>>8) + (0x80 >> 3)) >> 8) & 0x001f;
338
339 *dst = alphaFunc.bytemul(spix) + rr + rg + rb;
340 }
341
342 ++dst;
343 src += 3;
344 }
345 dst += dstExtraStride;
346 }
347
348 }
349
qt_blend_argb24_on_rgb16(uchar * destPixels,int dbpl,const uchar * srcPixels,int sbpl,int w,int h,int const_alpha)350 static void qt_blend_argb24_on_rgb16(uchar *destPixels, int dbpl,
351 const uchar *srcPixels, int sbpl,
352 int w, int h,
353 int const_alpha)
354 {
355 #ifdef QT_DEBUG_DRAW
356 printf("qt_blend_argb24_on_rgb16: dst=(%p, %d), src=(%p, %d), dim=(%d, %d) alpha=%d\n",
357 destPixels, dbpl, srcPixels, sbpl, w, h, const_alpha);
358 #endif
359
360 if (const_alpha != 256) {
361 SourceAndConstAlpha alphaFunc(const_alpha);
362 qt_blend_argb24_on_rgb16(destPixels, dbpl, srcPixels, sbpl, w, h, alphaFunc);
363 } else {
364 SourceOnlyAlpha alphaFunc;
365 qt_blend_argb24_on_rgb16(destPixels, dbpl, srcPixels, sbpl, w, h, alphaFunc);
366 }
367 }
368
369
370
371
qt_blend_argb32_on_rgb16_const_alpha(uchar * destPixels,int dbpl,const uchar * srcPixels,int sbpl,int w,int h,int const_alpha)372 void qt_blend_argb32_on_rgb16_const_alpha(uchar *destPixels, int dbpl,
373 const uchar *srcPixels, int sbpl,
374 int w, int h,
375 int const_alpha)
376 {
377 quint16 *dst = (quint16 *) destPixels;
378 const quint32 *src = (const quint32 *) srcPixels;
379
380 const_alpha = (const_alpha * 255) >> 8;
381 for (int y=0; y<h; ++y) {
382 for (int i = 0; i < w; ++i) {
383 uint s = src[i];
384 s = BYTE_MUL(s, const_alpha);
385 int alpha = qAlpha(s);
386 s = convert_argb32_to_rgb16(s);
387 s += BYTE_MUL_RGB16(dst[i], 255 - alpha);
388 dst[i] = s;
389 }
390 dst = (quint16 *)(((uchar *) dst) + dbpl);
391 src = (const quint32 *)(((const uchar *) src) + sbpl);
392 }
393 }
394
qt_blend_argb32_on_rgb16(uchar * destPixels,int dbpl,const uchar * srcPixels,int sbpl,int w,int h,int const_alpha)395 static void qt_blend_argb32_on_rgb16(uchar *destPixels, int dbpl,
396 const uchar *srcPixels, int sbpl,
397 int w, int h,
398 int const_alpha)
399 {
400 if (const_alpha != 256) {
401 qt_blend_argb32_on_rgb16_const_alpha(destPixels, dbpl, srcPixels, sbpl, w, h, const_alpha);
402 return;
403 }
404
405 quint16 *dst = (quint16 *) destPixels;
406 quint32 *src = (quint32 *) srcPixels;
407
408 for (int y=0; y<h; ++y) {
409 for (int x=0; x<w; ++x) {
410
411 quint32 spix = src[x];
412 quint32 alpha = spix >> 24;
413
414 if (alpha == 255) {
415 dst[x] = convert_argb32_to_rgb16(spix);
416 } else if (alpha != 0) {
417 quint32 dpix = dst[x];
418
419 quint32 sia = 255 - alpha;
420
421 quint32 sr = (spix >> 8) & 0xf800;
422 quint32 sg = (spix >> 5) & 0x07e0;
423 quint32 sb = (spix >> 3) & 0x001f;
424
425 quint32 dr = (dpix & 0x0000f800);
426 quint32 dg = (dpix & 0x000007e0);
427 quint32 db = (dpix & 0x0000001f);
428
429 quint32 siar = dr * sia;
430 quint32 siag = dg * sia;
431 quint32 siab = db * sia;
432
433 quint32 rr = sr + ((siar + (siar>>8) + (0x80 << 8)) >> 8);
434 quint32 rg = sg + ((siag + (siag>>8) + (0x80 << 3)) >> 8);
435 quint32 rb = sb + ((siab + (siab>>8) + (0x80 >> 3)) >> 8);
436
437 dst[x] = (rr & 0xf800)
438 | (rg & 0x07e0)
439 | (rb);
440 }
441 }
442 dst = (quint16 *) (((uchar *) dst) + dbpl);
443 src = (quint32 *) (((uchar *) src) + sbpl);
444 }
445 }
446
447
qt_blend_rgb32_on_rgb16(uchar * destPixels,int dbpl,const uchar * srcPixels,int sbpl,int w,int h,int const_alpha)448 static void qt_blend_rgb32_on_rgb16(uchar *destPixels, int dbpl,
449 const uchar *srcPixels, int sbpl,
450 int w, int h,
451 int const_alpha)
452 {
453 #ifdef QT_DEBUG_DRAW
454 printf("qt_blend_rgb32_on_rgb16: dst=(%p, %d), src=(%p, %d), dim=(%d, %d) alpha=%d\n",
455 destPixels, dbpl, srcPixels, sbpl, w, h, const_alpha);
456 #endif
457
458 if (const_alpha != 256) {
459 qt_blend_argb32_on_rgb16(destPixels, dbpl, srcPixels, sbpl, w, h, const_alpha);
460 return;
461 }
462
463 const quint32 *src = (const quint32 *) srcPixels;
464 int srcExtraStride = (sbpl >> 2) - w;
465
466 int dstJPL = dbpl / 2;
467
468 quint16 *dst = (quint16 *) destPixels;
469 quint16 *dstEnd = dst + dstJPL * h;
470
471 int dstExtraStride = dstJPL - w;
472
473 while (dst < dstEnd) {
474 const quint32 *srcEnd = src + w;
475 while (src < srcEnd) {
476 *dst = convert_argb32_to_rgb16(*src);
477 ++dst;
478 ++src;
479 }
480 dst += dstExtraStride;
481 src += srcExtraStride;
482 }
483 }
484
485
486
487 /************************************************************************
488 RGB32 (-888) format target format
489 ************************************************************************/
490
qt_blend_argb32_on_argb32(uchar * destPixels,int dbpl,const uchar * srcPixels,int sbpl,int w,int h,int const_alpha)491 static void qt_blend_argb32_on_argb32(uchar *destPixels, int dbpl,
492 const uchar *srcPixels, int sbpl,
493 int w, int h,
494 int const_alpha)
495 {
496 #ifdef QT_DEBUG_DRAW
497 fprintf(stdout, "qt_blend_argb32_on_argb32: dst=(%p, %d), src=(%p, %d), dim=(%d, %d) alpha=%d\n",
498 destPixels, dbpl, srcPixels, sbpl, w, h, const_alpha);
499 fflush(stdout);
500 #endif
501
502 const uint *src = (const uint *) srcPixels;
503 uint *dst = (uint *) destPixels;
504 if (const_alpha == 256) {
505 for (int y=0; y<h; ++y) {
506 for (int x=0; x<w; ++x) {
507 uint s = src[x];
508 if (s >= 0xff000000)
509 dst[x] = s;
510 else if (s != 0)
511 dst[x] = s + BYTE_MUL(dst[x], qAlpha(~s));
512 }
513 dst = (quint32 *)(((uchar *) dst) + dbpl);
514 src = (const quint32 *)(((const uchar *) src) + sbpl);
515 }
516 } else if (const_alpha != 0) {
517 const_alpha = (const_alpha * 255) >> 8;
518 for (int y=0; y<h; ++y) {
519 for (int x=0; x<w; ++x) {
520 uint s = BYTE_MUL(src[x], const_alpha);
521 dst[x] = s + BYTE_MUL(dst[x], qAlpha(~s));
522 }
523 dst = (quint32 *)(((uchar *) dst) + dbpl);
524 src = (const quint32 *)(((const uchar *) src) + sbpl);
525 }
526 }
527 }
528
529
qt_blend_rgb32_on_rgb32(uchar * destPixels,int dbpl,const uchar * srcPixels,int sbpl,int w,int h,int const_alpha)530 void qt_blend_rgb32_on_rgb32(uchar *destPixels, int dbpl,
531 const uchar *srcPixels, int sbpl,
532 int w, int h,
533 int const_alpha)
534 {
535 #ifdef QT_DEBUG_DRAW
536 fprintf(stdout, "qt_blend_rgb32_on_rgb32: dst=(%p, %d), src=(%p, %d), dim=(%d, %d) alpha=%d\n",
537 destPixels, dbpl, srcPixels, sbpl, w, h, const_alpha);
538 fflush(stdout);
539 #endif
540
541 if (const_alpha != 256) {
542 qt_blend_argb32_on_argb32(destPixels, dbpl, srcPixels, sbpl, w, h, const_alpha);
543 return;
544 }
545
546 const uint *src = (const uint *) srcPixels;
547 uint *dst = (uint *) destPixels;
548 if (w <= 64) {
549 for (int y=0; y<h; ++y) {
550 qt_memconvert(dst, src, w);
551 dst = (quint32 *)(((uchar *) dst) + dbpl);
552 src = (const quint32 *)(((const uchar *) src) + sbpl);
553 }
554 } else {
555 int len = w * 4;
556 for (int y=0; y<h; ++y) {
557 memcpy(dst, src, len);
558 dst = (quint32 *)(((uchar *) dst) + dbpl);
559 src = (const quint32 *)(((const uchar *) src) + sbpl);
560 }
561 }
562 }
563
564
565
566 struct Blend_RGB32_on_RGB32_NoAlpha {
writeBlend_RGB32_on_RGB32_NoAlpha567 inline void write(quint32 *dst, quint32 src) { *dst = src; }
568
flushBlend_RGB32_on_RGB32_NoAlpha569 inline void flush(void *) {}
570 };
571
572 struct Blend_RGB32_on_RGB32_ConstAlpha {
Blend_RGB32_on_RGB32_ConstAlphaBlend_RGB32_on_RGB32_ConstAlpha573 inline Blend_RGB32_on_RGB32_ConstAlpha(quint32 alpha) {
574 m_alpha = (alpha * 255) >> 8;
575 m_ialpha = 255 - m_alpha;
576 }
577
writeBlend_RGB32_on_RGB32_ConstAlpha578 inline void write(quint32 *dst, quint32 src) {
579 *dst = BYTE_MUL(src, m_alpha) + BYTE_MUL(*dst, m_ialpha);
580 }
581
flushBlend_RGB32_on_RGB32_ConstAlpha582 inline void flush(void *) {}
583
584 quint32 m_alpha;
585 quint32 m_ialpha;
586 };
587
588 struct Blend_ARGB32_on_ARGB32_SourceAlpha {
writeBlend_ARGB32_on_ARGB32_SourceAlpha589 inline void write(quint32 *dst, quint32 src) {
590 *dst = src + BYTE_MUL(*dst, qAlpha(~src));
591 }
592
flushBlend_ARGB32_on_ARGB32_SourceAlpha593 inline void flush(void *) {}
594 };
595
596 struct Blend_ARGB32_on_ARGB32_SourceAndConstAlpha {
Blend_ARGB32_on_ARGB32_SourceAndConstAlphaBlend_ARGB32_on_ARGB32_SourceAndConstAlpha597 inline Blend_ARGB32_on_ARGB32_SourceAndConstAlpha(quint32 alpha) {
598 m_alpha = (alpha * 255) >> 8;
599 m_ialpha = 255 - m_alpha;
600 }
601
writeBlend_ARGB32_on_ARGB32_SourceAndConstAlpha602 inline void write(quint32 *dst, quint32 src) {
603 src = BYTE_MUL(src, m_alpha);
604 *dst = src + BYTE_MUL(*dst, qAlpha(~src));
605 }
606
flushBlend_ARGB32_on_ARGB32_SourceAndConstAlpha607 inline void flush(void *) {}
608
609 quint32 m_alpha;
610 quint32 m_ialpha;
611 };
612
qt_scale_image_rgb32_on_rgb32(uchar * destPixels,int dbpl,const uchar * srcPixels,int sbpl,int sh,const QRectF & targetRect,const QRectF & sourceRect,const QRect & clip,int const_alpha)613 void qt_scale_image_rgb32_on_rgb32(uchar *destPixels, int dbpl,
614 const uchar *srcPixels, int sbpl, int sh,
615 const QRectF &targetRect,
616 const QRectF &sourceRect,
617 const QRect &clip,
618 int const_alpha)
619 {
620 #ifdef QT_DEBUG_DRAW
621 printf("qt_scale_rgb32_on_rgb32: dst=(%p, %d), src=(%p, %d), target=(%d, %d), [%d x %d], src=(%d, %d) [%d x %d] alpha=%d\n",
622 destPixels, dbpl, srcPixels, sbpl,
623 targetRect.x(), targetRect.y(), targetRect.width(), targetRect.height(),
624 sourceRect.x(), sourceRect.y(), sourceRect.width(), sourceRect.height(),
625 const_alpha);
626 #endif
627 if (const_alpha == 256) {
628 Blend_RGB32_on_RGB32_NoAlpha noAlpha;
629 qt_scale_image_32bit(destPixels, dbpl, srcPixels, sbpl, sh,
630 targetRect, sourceRect, clip, noAlpha);
631 } else {
632 Blend_RGB32_on_RGB32_ConstAlpha constAlpha(const_alpha);
633 qt_scale_image_32bit(destPixels, dbpl, srcPixels, sbpl, sh,
634 targetRect, sourceRect, clip, constAlpha);
635 }
636 }
637
qt_scale_image_argb32_on_argb32(uchar * destPixels,int dbpl,const uchar * srcPixels,int sbpl,int sh,const QRectF & targetRect,const QRectF & sourceRect,const QRect & clip,int const_alpha)638 void qt_scale_image_argb32_on_argb32(uchar *destPixels, int dbpl,
639 const uchar *srcPixels, int sbpl, int sh,
640 const QRectF &targetRect,
641 const QRectF &sourceRect,
642 const QRect &clip,
643 int const_alpha)
644 {
645 #ifdef QT_DEBUG_DRAW
646 printf("qt_scale_argb32_on_argb32: dst=(%p, %d), src=(%p, %d), target=(%d, %d), [%d x %d], src=(%d, %d) [%d x %d] alpha=%d\n",
647 destPixels, dbpl, srcPixels, sbpl,
648 targetRect.x(), targetRect.y(), targetRect.width(), targetRect.height(),
649 sourceRect.x(), sourceRect.y(), sourceRect.width(), sourceRect.height(),
650 const_alpha);
651 #endif
652 if (const_alpha == 256) {
653 Blend_ARGB32_on_ARGB32_SourceAlpha sourceAlpha;
654 qt_scale_image_32bit(destPixels, dbpl, srcPixels, sbpl, sh,
655 targetRect, sourceRect, clip, sourceAlpha);
656 } else {
657 Blend_ARGB32_on_ARGB32_SourceAndConstAlpha constAlpha(const_alpha);
658 qt_scale_image_32bit(destPixels, dbpl, srcPixels, sbpl, sh,
659 targetRect, sourceRect, clip, constAlpha);
660 }
661 }
662
qt_transform_image_rgb16_on_rgb16(uchar * destPixels,int dbpl,const uchar * srcPixels,int sbpl,const QRectF & targetRect,const QRectF & sourceRect,const QRect & clip,const QTransform & targetRectTransform,int const_alpha)663 void qt_transform_image_rgb16_on_rgb16(uchar *destPixels, int dbpl,
664 const uchar *srcPixels, int sbpl,
665 const QRectF &targetRect,
666 const QRectF &sourceRect,
667 const QRect &clip,
668 const QTransform &targetRectTransform,
669 int const_alpha)
670 {
671 if (const_alpha == 256) {
672 Blend_RGB16_on_RGB16_NoAlpha noAlpha;
673 qt_transform_image(reinterpret_cast<quint16 *>(destPixels), dbpl,
674 reinterpret_cast<const quint16 *>(srcPixels), sbpl,
675 targetRect, sourceRect, clip, targetRectTransform, noAlpha);
676 } else {
677 Blend_RGB16_on_RGB16_ConstAlpha constAlpha(const_alpha);
678 qt_transform_image(reinterpret_cast<quint16 *>(destPixels), dbpl,
679 reinterpret_cast<const quint16 *>(srcPixels), sbpl,
680 targetRect, sourceRect, clip, targetRectTransform, constAlpha);
681 }
682 }
683
qt_transform_image_argb24_on_rgb16(uchar * destPixels,int dbpl,const uchar * srcPixels,int sbpl,const QRectF & targetRect,const QRectF & sourceRect,const QRect & clip,const QTransform & targetRectTransform,int const_alpha)684 void qt_transform_image_argb24_on_rgb16(uchar *destPixels, int dbpl,
685 const uchar *srcPixels, int sbpl,
686 const QRectF &targetRect,
687 const QRectF &sourceRect,
688 const QRect &clip,
689 const QTransform &targetRectTransform,
690 int const_alpha)
691 {
692 if (const_alpha == 256) {
693 Blend_ARGB24_on_RGB16_SourceAlpha noAlpha;
694 qt_transform_image(reinterpret_cast<quint16 *>(destPixels), dbpl,
695 reinterpret_cast<const qargb8565 *>(srcPixels), sbpl,
696 targetRect, sourceRect, clip, targetRectTransform, noAlpha);
697 } else {
698 Blend_ARGB24_on_RGB16_SourceAndConstAlpha constAlpha(const_alpha);
699 qt_transform_image(reinterpret_cast<quint16 *>(destPixels), dbpl,
700 reinterpret_cast<const qargb8565 *>(srcPixels), sbpl,
701 targetRect, sourceRect, clip, targetRectTransform, constAlpha);
702 }
703 }
704
705
qt_transform_image_argb32_on_rgb16(uchar * destPixels,int dbpl,const uchar * srcPixels,int sbpl,const QRectF & targetRect,const QRectF & sourceRect,const QRect & clip,const QTransform & targetRectTransform,int const_alpha)706 void qt_transform_image_argb32_on_rgb16(uchar *destPixels, int dbpl,
707 const uchar *srcPixels, int sbpl,
708 const QRectF &targetRect,
709 const QRectF &sourceRect,
710 const QRect &clip,
711 const QTransform &targetRectTransform,
712 int const_alpha)
713 {
714 if (const_alpha == 256) {
715 Blend_ARGB32_on_RGB16_SourceAlpha noAlpha;
716 qt_transform_image(reinterpret_cast<quint16 *>(destPixels), dbpl,
717 reinterpret_cast<const quint32 *>(srcPixels), sbpl,
718 targetRect, sourceRect, clip, targetRectTransform, noAlpha);
719 } else {
720 Blend_ARGB32_on_RGB16_SourceAndConstAlpha constAlpha(const_alpha);
721 qt_transform_image(reinterpret_cast<quint16 *>(destPixels), dbpl,
722 reinterpret_cast<const quint32 *>(srcPixels), sbpl,
723 targetRect, sourceRect, clip, targetRectTransform, constAlpha);
724 }
725 }
726
727
qt_transform_image_rgb32_on_rgb32(uchar * destPixels,int dbpl,const uchar * srcPixels,int sbpl,const QRectF & targetRect,const QRectF & sourceRect,const QRect & clip,const QTransform & targetRectTransform,int const_alpha)728 void qt_transform_image_rgb32_on_rgb32(uchar *destPixels, int dbpl,
729 const uchar *srcPixels, int sbpl,
730 const QRectF &targetRect,
731 const QRectF &sourceRect,
732 const QRect &clip,
733 const QTransform &targetRectTransform,
734 int const_alpha)
735 {
736 if (const_alpha == 256) {
737 Blend_RGB32_on_RGB32_NoAlpha noAlpha;
738 qt_transform_image(reinterpret_cast<quint32 *>(destPixels), dbpl,
739 reinterpret_cast<const quint32 *>(srcPixels), sbpl,
740 targetRect, sourceRect, clip, targetRectTransform, noAlpha);
741 } else {
742 Blend_RGB32_on_RGB32_ConstAlpha constAlpha(const_alpha);
743 qt_transform_image(reinterpret_cast<quint32 *>(destPixels), dbpl,
744 reinterpret_cast<const quint32 *>(srcPixels), sbpl,
745 targetRect, sourceRect, clip, targetRectTransform, constAlpha);
746 }
747 }
748
qt_transform_image_argb32_on_argb32(uchar * destPixels,int dbpl,const uchar * srcPixels,int sbpl,const QRectF & targetRect,const QRectF & sourceRect,const QRect & clip,const QTransform & targetRectTransform,int const_alpha)749 void qt_transform_image_argb32_on_argb32(uchar *destPixels, int dbpl,
750 const uchar *srcPixels, int sbpl,
751 const QRectF &targetRect,
752 const QRectF &sourceRect,
753 const QRect &clip,
754 const QTransform &targetRectTransform,
755 int const_alpha)
756 {
757 if (const_alpha == 256) {
758 Blend_ARGB32_on_ARGB32_SourceAlpha sourceAlpha;
759 qt_transform_image(reinterpret_cast<quint32 *>(destPixels), dbpl,
760 reinterpret_cast<const quint32 *>(srcPixels), sbpl,
761 targetRect, sourceRect, clip, targetRectTransform, sourceAlpha);
762 } else {
763 Blend_ARGB32_on_ARGB32_SourceAndConstAlpha constAlpha(const_alpha);
764 qt_transform_image(reinterpret_cast<quint32 *>(destPixels), dbpl,
765 reinterpret_cast<const quint32 *>(srcPixels), sbpl,
766 targetRect, sourceRect, clip, targetRectTransform, constAlpha);
767 }
768 }
769
770 SrcOverScaleFunc qScaleFunctions[QImage::NImageFormats][QImage::NImageFormats] = {
771 { // Format_Invalid
772 0, // Format_Invalid,
773 0, // Format_Mono,
774 0, // Format_MonoLSB,
775 0, // Format_Indexed8,
776 0, // Format_RGB32,
777 0, // Format_ARGB32,
778 0, // Format_ARGB32_Premultiplied,
779 0, // Format_RGB16,
780 0, // Format_ARGB8565_Premultiplied,
781 0, // Format_RGB666,
782 0, // Format_ARGB6666_Premultiplied,
783 0, // Format_RGB555,
784 0, // Format_ARGB8555_Premultiplied,
785 0, // Format_RGB888,
786 0, // Format_RGB444,
787 0 // Format_ARGB4444_Premultiplied,
788 },
789 { // Format_Mono
790 0, // Format_Invalid,
791 0, // Format_Mono,
792 0, // Format_MonoLSB,
793 0, // Format_Indexed8,
794 0, // Format_RGB32,
795 0, // Format_ARGB32,
796 0, // Format_ARGB32_Premultiplied,
797 0, // Format_RGB16,
798 0, // Format_ARGB8565_Premultiplied,
799 0, // Format_RGB666,
800 0, // Format_ARGB6666_Premultiplied,
801 0, // Format_RGB555,
802 0, // Format_ARGB8555_Premultiplied,
803 0, // Format_RGB888,
804 0, // Format_RGB444,
805 0 // Format_ARGB4444_Premultiplied,
806 },
807 { // Format_MonoLSB
808 0, // Format_Invalid,
809 0, // Format_Mono,
810 0, // Format_MonoLSB,
811 0, // Format_Indexed8,
812 0, // Format_RGB32,
813 0, // Format_ARGB32,
814 0, // Format_ARGB32_Premultiplied,
815 0, // Format_RGB16,
816 0, // Format_ARGB8565_Premultiplied,
817 0, // Format_RGB666,
818 0, // Format_ARGB6666_Premultiplied,
819 0, // Format_RGB555,
820 0, // Format_ARGB8555_Premultiplied,
821 0, // Format_RGB888,
822 0, // Format_RGB444,
823 0 // Format_ARGB4444_Premultiplied,
824 },
825 { // Format_Indexed8
826 0, // Format_Invalid,
827 0, // Format_Mono,
828 0, // Format_MonoLSB,
829 0, // Format_Indexed8,
830 0, // Format_RGB32,
831 0, // Format_ARGB32,
832 0, // Format_ARGB32_Premultiplied,
833 0, // Format_RGB16,
834 0, // Format_ARGB8565_Premultiplied,
835 0, // Format_RGB666,
836 0, // Format_ARGB6666_Premultiplied,
837 0, // Format_RGB555,
838 0, // Format_ARGB8555_Premultiplied,
839 0, // Format_RGB888,
840 0, // Format_RGB444,
841 0 // Format_ARGB4444_Premultiplied,
842 },
843 { // Format_RGB32
844 0, // Format_Invalid,
845 0, // Format_Mono,
846 0, // Format_MonoLSB,
847 0, // Format_Indexed8,
848 qt_scale_image_rgb32_on_rgb32, // Format_RGB32,
849 0, // Format_ARGB32,
850 qt_scale_image_argb32_on_argb32, // Format_ARGB32_Premultiplied,
851 0, // Format_RGB16,
852 0, // Format_ARGB8565_Premultiplied,
853 0, // Format_RGB666,
854 0, // Format_ARGB6666_Premultiplied,
855 0, // Format_RGB555,
856 0, // Format_ARGB8555_Premultiplied,
857 0, // Format_RGB888,
858 0, // Format_RGB444,
859 0 // Format_ARGB4444_Premultiplied,
860 },
861 { // Format_ARGB32
862 0, // Format_Invalid,
863 0, // Format_Mono,
864 0, // Format_MonoLSB,
865 0, // Format_Indexed8,
866 0, // Format_RGB32,
867 0, // Format_ARGB32,
868 0, // Format_ARGB32_Premultiplied,
869 0, // Format_RGB16,
870 0, // Format_ARGB8565_Premultiplied,
871 0, // Format_RGB666,
872 0, // Format_ARGB6666_Premultiplied,
873 0, // Format_RGB555,
874 0, // Format_ARGB8555_Premultiplied,
875 0, // Format_RGB888,
876 0, // Format_RGB444,
877 0 // Format_ARGB4444_Premultiplied,
878 },
879 { // Format_ARGB32_Premultiplied
880 0, // Format_Invalid,
881 0, // Format_Mono,
882 0, // Format_MonoLSB,
883 0, // Format_Indexed8,
884 qt_scale_image_rgb32_on_rgb32, // Format_RGB32,
885 0, // Format_ARGB32,
886 qt_scale_image_argb32_on_argb32, // Format_ARGB32_Premultiplied,
887 0, // Format_RGB16,
888 0, // Format_ARGB8565_Premultiplied,
889 0, // Format_RGB666,
890 0, // Format_ARGB6666_Premultiplied,
891 0, // Format_RGB555,
892 0, // Format_ARGB8555_Premultiplied,
893 0, // Format_RGB888,
894 0, // Format_RGB444,
895 0 // Format_ARGB4444_Premultiplied,
896 },
897 { // Format_RGB16
898 0, // Format_Invalid,
899 0, // Format_Mono,
900 0, // Format_MonoLSB,
901 0, // Format_Indexed8,
902 0, // Format_RGB32,
903 0, // Format_ARGB32,
904 qt_scale_image_argb32_on_rgb16, // Format_ARGB32_Premultiplied,
905 qt_scale_image_rgb16_on_rgb16, // Format_RGB16,
906 qt_scale_image_argb24_on_rgb16, // Format_ARGB8565_Premultiplied,
907 0, // Format_RGB666,
908 0, // Format_ARGB6666_Premultiplied,
909 0, // Format_RGB555,
910 0, // Format_ARGB8555_Premultiplied,
911 0, // Format_RGB888,
912 0, // Format_RGB444,
913 0 // Format_ARGB4444_Premultiplied,
914 },
915 { // Format_ARGB8565_Premultiplied
916 0, // Format_Invalid,
917 0, // Format_Mono,
918 0, // Format_MonoLSB,
919 0, // Format_Indexed8,
920 0, // Format_RGB32,
921 0, // Format_ARGB32,
922 0, // Format_ARGB32_Premultiplied,
923 0, // Format_RGB16,
924 0, // Format_ARGB8565_Premultiplied,
925 0, // Format_RGB666,
926 0, // Format_ARGB6666_Premultiplied,
927 0, // Format_RGB555,
928 0, // Format_ARGB8555_Premultiplied,
929 0, // Format_RGB888,
930 0, // Format_RGB444,
931 0 // Format_ARGB4444_Premultiplied,
932 },
933 { // Format_RGB666
934 0, // Format_Invalid,
935 0, // Format_Mono,
936 0, // Format_MonoLSB,
937 0, // Format_Indexed8,
938 0, // Format_RGB32,
939 0, // Format_ARGB32,
940 0, // Format_ARGB32_Premultiplied,
941 0, // Format_RGB16,
942 0, // Format_ARGB8565_Premultiplied,
943 0, // Format_RGB666,
944 0, // Format_ARGB6666_Premultiplied,
945 0, // Format_RGB555,
946 0, // Format_ARGB8555_Premultiplied,
947 0, // Format_RGB888,
948 0, // Format_RGB444,
949 0 // Format_ARGB4444_Premultiplied,
950 },
951 { // Format_ARGB6666_Premultiplied
952 0, // Format_Invalid,
953 0, // Format_Mono,
954 0, // Format_MonoLSB,
955 0, // Format_Indexed8,
956 0, // Format_RGB32,
957 0, // Format_ARGB32,
958 0, // Format_ARGB32_Premultiplied,
959 0, // Format_RGB16,
960 0, // Format_ARGB8565_Premultiplied,
961 0, // Format_RGB666,
962 0, // Format_ARGB6666_Premultiplied,
963 0, // Format_RGB555,
964 0, // Format_ARGB8555_Premultiplied,
965 0, // Format_RGB888,
966 0, // Format_RGB444,
967 0 // Format_ARGB4444_Premultiplied,
968 },
969 { // Format_RGB555
970 0, // Format_Invalid,
971 0, // Format_Mono,
972 0, // Format_MonoLSB,
973 0, // Format_Indexed8,
974 0, // Format_RGB32,
975 0, // Format_ARGB32,
976 0, // Format_ARGB32_Premultiplied,
977 0, // Format_RGB16,
978 0, // Format_ARGB8565_Premultiplied,
979 0, // Format_RGB666,
980 0, // Format_ARGB6666_Premultiplied,
981 0, // Format_RGB555,
982 0, // Format_ARGB8555_Premultiplied,
983 0, // Format_RGB888,
984 0, // Format_RGB444,
985 0 // Format_ARGB4444_Premultiplied,
986 },
987 { // Format_ARGB8555_Premultiplied
988 0, // Format_Invalid,
989 0, // Format_Mono,
990 0, // Format_MonoLSB,
991 0, // Format_Indexed8,
992 0, // Format_RGB32,
993 0, // Format_ARGB32,
994 0, // Format_ARGB32_Premultiplied,
995 0, // Format_RGB16,
996 0, // Format_ARGB8565_Premultiplied,
997 0, // Format_RGB666,
998 0, // Format_ARGB6666_Premultiplied,
999 0, // Format_RGB555,
1000 0, // Format_ARGB8555_Premultiplied,
1001 0, // Format_RGB888,
1002 0, // Format_RGB444,
1003 0 // Format_ARGB4444_Premultiplied,
1004 },
1005 { // Format_RGB888
1006 0, // Format_Invalid,
1007 0, // Format_Mono,
1008 0, // Format_MonoLSB,
1009 0, // Format_Indexed8,
1010 0, // Format_RGB32,
1011 0, // Format_ARGB32,
1012 0, // Format_ARGB32_Premultiplied,
1013 0, // Format_RGB16,
1014 0, // Format_ARGB8565_Premultiplied,
1015 0, // Format_RGB666,
1016 0, // Format_ARGB6666_Premultiplied,
1017 0, // Format_RGB555,
1018 0, // Format_ARGB8555_Premultiplied,
1019 0, // Format_RGB888,
1020 0, // Format_RGB444,
1021 0 // Format_ARGB4444_Premultiplied,
1022 },
1023 { // Format_RGB444
1024 0, // Format_Invalid,
1025 0, // Format_Mono,
1026 0, // Format_MonoLSB,
1027 0, // Format_Indexed8,
1028 0, // Format_RGB32,
1029 0, // Format_ARGB32,
1030 0, // Format_ARGB32_Premultiplied,
1031 0, // Format_RGB16,
1032 0, // Format_ARGB8565_Premultiplied,
1033 0, // Format_RGB666,
1034 0, // Format_ARGB6666_Premultiplied,
1035 0, // Format_RGB555,
1036 0, // Format_ARGB8555_Premultiplied,
1037 0, // Format_RGB888,
1038 0, // Format_RGB444,
1039 0 // Format_ARGB4444_Premultiplied,
1040 },
1041 { // Format_ARGB4444_Premultiplied
1042 0, // Format_Invalid,
1043 0, // Format_Mono,
1044 0, // Format_MonoLSB,
1045 0, // Format_Indexed8,
1046 0, // Format_RGB32,
1047 0, // Format_ARGB32,
1048 0, // Format_ARGB32_Premultiplied,
1049 0, // Format_RGB16,
1050 0, // Format_ARGB8565_Premultiplied,
1051 0, // Format_RGB666,
1052 0, // Format_ARGB6666_Premultiplied,
1053 0, // Format_RGB555,
1054 0, // Format_ARGB8555_Premultiplied,
1055 0, // Format_RGB888,
1056 0, // Format_RGB444,
1057 0 // Format_ARGB4444_Premultiplied,
1058 }
1059 };
1060
1061
1062 SrcOverBlendFunc qBlendFunctions[QImage::NImageFormats][QImage::NImageFormats] = {
1063 { // Format_Invalid
1064 0, // Format_Invalid,
1065 0, // Format_Mono,
1066 0, // Format_MonoLSB,
1067 0, // Format_Indexed8,
1068 0, // Format_RGB32,
1069 0, // Format_ARGB32,
1070 0, // Format_ARGB32_Premultiplied,
1071 0, // Format_RGB16,
1072 0, // Format_ARGB8565_Premultiplied,
1073 0, // Format_RGB666,
1074 0, // Format_ARGB6666_Premultiplied,
1075 0, // Format_RGB555,
1076 0, // Format_ARGB8555_Premultiplied,
1077 0, // Format_RGB888,
1078 0, // Format_RGB444,
1079 0 // Format_ARGB4444_Premultiplied,
1080 },
1081 { // Format_Mono
1082 0, // Format_Invalid,
1083 0, // Format_Mono,
1084 0, // Format_MonoLSB,
1085 0, // Format_Indexed8,
1086 0, // Format_RGB32,
1087 0, // Format_ARGB32,
1088 0, // Format_ARGB32_Premultiplied,
1089 0, // Format_RGB16,
1090 0, // Format_ARGB8565_Premultiplied,
1091 0, // Format_RGB666,
1092 0, // Format_ARGB6666_Premultiplied,
1093 0, // Format_RGB555,
1094 0, // Format_ARGB8555_Premultiplied,
1095 0, // Format_RGB888,
1096 0, // Format_RGB444,
1097 0 // Format_ARGB4444_Premultiplied,
1098 },
1099 { // Format_MonoLSB
1100 0, // Format_Invalid,
1101 0, // Format_Mono,
1102 0, // Format_MonoLSB,
1103 0, // Format_Indexed8,
1104 0, // Format_RGB32,
1105 0, // Format_ARGB32,
1106 0, // Format_ARGB32_Premultiplied,
1107 0, // Format_RGB16,
1108 0, // Format_ARGB8565_Premultiplied,
1109 0, // Format_RGB666,
1110 0, // Format_ARGB6666_Premultiplied,
1111 0, // Format_RGB555,
1112 0, // Format_ARGB8555_Premultiplied,
1113 0, // Format_RGB888,
1114 0, // Format_RGB444,
1115 0 // Format_ARGB4444_Premultiplied,
1116 },
1117 { // Format_Indexed8
1118 0, // Format_Invalid,
1119 0, // Format_Mono,
1120 0, // Format_MonoLSB,
1121 0, // Format_Indexed8,
1122 0, // Format_RGB32,
1123 0, // Format_ARGB32,
1124 0, // Format_ARGB32_Premultiplied,
1125 0, // Format_RGB16,
1126 0, // Format_ARGB8565_Premultiplied,
1127 0, // Format_RGB666,
1128 0, // Format_ARGB6666_Premultiplied,
1129 0, // Format_RGB555,
1130 0, // Format_ARGB8555_Premultiplied,
1131 0, // Format_RGB888,
1132 0, // Format_RGB444,
1133 0 // Format_ARGB4444_Premultiplied,
1134 },
1135 { // Format_RGB32
1136 0, // Format_Invalid,
1137 0, // Format_Mono,
1138 0, // Format_MonoLSB,
1139 0, // Format_Indexed8,
1140 qt_blend_rgb32_on_rgb32, // Format_RGB32,
1141 0, // Format_ARGB32,
1142 qt_blend_argb32_on_argb32, // Format_ARGB32_Premultiplied,
1143 0, // Format_RGB16,
1144 0, // Format_ARGB8565_Premultiplied,
1145 0, // Format_RGB666,
1146 0, // Format_ARGB6666_Premultiplied,
1147 0, // Format_RGB555,
1148 0, // Format_ARGB8555_Premultiplied,
1149 0, // Format_RGB888,
1150 0, // Format_RGB444,
1151 0 // Format_ARGB4444_Premultiplied,
1152 },
1153 { // Format_ARGB32
1154 0, // Format_Invalid,
1155 0, // Format_Mono,
1156 0, // Format_MonoLSB,
1157 0, // Format_Indexed8,
1158 0, // Format_RGB32,
1159 0, // Format_ARGB32,
1160 0, // Format_ARGB32_Premultiplied,
1161 0, // Format_RGB16,
1162 0, // Format_ARGB8565_Premultiplied,
1163 0, // Format_RGB666,
1164 0, // Format_ARGB6666_Premultiplied,
1165 0, // Format_RGB555,
1166 0, // Format_ARGB8555_Premultiplied,
1167 0, // Format_RGB888,
1168 0, // Format_RGB444,
1169 0 // Format_ARGB4444_Premultiplied,
1170 },
1171 { // Format_ARGB32_Premultiplied
1172 0, // Format_Invalid,
1173 0, // Format_Mono,
1174 0, // Format_MonoLSB,
1175 0, // Format_Indexed8,
1176 qt_blend_rgb32_on_rgb32, // Format_RGB32,
1177 0, // Format_ARGB32,
1178 qt_blend_argb32_on_argb32, // Format_ARGB32_Premultiplied,
1179 0, // Format_RGB16,
1180 0, // Format_ARGB8565_Premultiplied,
1181 0, // Format_RGB666,
1182 0, // Format_ARGB6666_Premultiplied,
1183 0, // Format_RGB555,
1184 0, // Format_ARGB8555_Premultiplied,
1185 0, // Format_RGB888,
1186 0, // Format_RGB444,
1187 0 // Format_ARGB4444_Premultiplied,
1188 },
1189 { // Format_RGB16
1190 0, // Format_Invalid,
1191 0, // Format_Mono,
1192 0, // Format_MonoLSB,
1193 0, // Format_Indexed8,
1194 qt_blend_rgb32_on_rgb16, // Format_RGB32,
1195 0, // Format_ARGB32,
1196 qt_blend_argb32_on_rgb16, // Format_ARGB32_Premultiplied,
1197 qt_blend_rgb16_on_rgb16, // Format_RGB16,
1198 qt_blend_argb24_on_rgb16, // Format_ARGB8565_Premultiplied,
1199 0, // Format_RGB666,
1200 0, // Format_ARGB6666_Premultiplied,
1201 0, // Format_RGB555,
1202 0, // Format_ARGB8555_Premultiplied,
1203 0, // Format_RGB888,
1204 0, // Format_RGB444,
1205 0 // Format_ARGB4444_Premultiplied,
1206 },
1207 { // Format_ARGB8565_Premultiplied
1208 0, // Format_Invalid,
1209 0, // Format_Mono,
1210 0, // Format_MonoLSB,
1211 0, // Format_Indexed8,
1212 0, // Format_RGB32,
1213 0, // Format_ARGB32,
1214 0, // Format_ARGB32_Premultiplied,
1215 0, // Format_RGB16,
1216 0, // Format_ARGB8565_Premultiplied,
1217 0, // Format_RGB666,
1218 0, // Format_ARGB6666_Premultiplied,
1219 0, // Format_RGB555,
1220 0, // Format_ARGB8555_Premultiplied,
1221 0, // Format_RGB888,
1222 0, // Format_RGB444,
1223 0 // Format_ARGB4444_Premultiplied,
1224 },
1225 { // Format_RGB666
1226 0, // Format_Invalid,
1227 0, // Format_Mono,
1228 0, // Format_MonoLSB,
1229 0, // Format_Indexed8,
1230 0, // Format_RGB32,
1231 0, // Format_ARGB32,
1232 0, // Format_ARGB32_Premultiplied,
1233 0, // Format_RGB16,
1234 0, // Format_ARGB8565_Premultiplied,
1235 0, // Format_RGB666,
1236 0, // Format_ARGB6666_Premultiplied,
1237 0, // Format_RGB555,
1238 0, // Format_ARGB8555_Premultiplied,
1239 0, // Format_RGB888,
1240 0, // Format_RGB444,
1241 0 // Format_ARGB4444_Premultiplied,
1242 },
1243 { // Format_ARGB6666_Premultiplied
1244 0, // Format_Invalid,
1245 0, // Format_Mono,
1246 0, // Format_MonoLSB,
1247 0, // Format_Indexed8,
1248 0, // Format_RGB32,
1249 0, // Format_ARGB32,
1250 0, // Format_ARGB32_Premultiplied,
1251 0, // Format_RGB16,
1252 0, // Format_ARGB8565_Premultiplied,
1253 0, // Format_RGB666,
1254 0, // Format_ARGB6666_Premultiplied,
1255 0, // Format_RGB555,
1256 0, // Format_ARGB8555_Premultiplied,
1257 0, // Format_RGB888,
1258 0, // Format_RGB444,
1259 0 // Format_ARGB4444_Premultiplied,
1260 },
1261 { // Format_RGB555
1262 0, // Format_Invalid,
1263 0, // Format_Mono,
1264 0, // Format_MonoLSB,
1265 0, // Format_Indexed8,
1266 0, // Format_RGB32,
1267 0, // Format_ARGB32,
1268 0, // Format_ARGB32_Premultiplied,
1269 0, // Format_RGB16,
1270 0, // Format_ARGB8565_Premultiplied,
1271 0, // Format_RGB666,
1272 0, // Format_ARGB6666_Premultiplied,
1273 0, // Format_RGB555,
1274 0, // Format_ARGB8555_Premultiplied,
1275 0, // Format_RGB888,
1276 0, // Format_RGB444,
1277 0 // Format_ARGB4444_Premultiplied,
1278 },
1279 { // Format_ARGB8555_Premultiplied
1280 0, // Format_Invalid,
1281 0, // Format_Mono,
1282 0, // Format_MonoLSB,
1283 0, // Format_Indexed8,
1284 0, // Format_RGB32,
1285 0, // Format_ARGB32,
1286 0, // Format_ARGB32_Premultiplied,
1287 0, // Format_RGB16,
1288 0, // Format_ARGB8565_Premultiplied,
1289 0, // Format_RGB666,
1290 0, // Format_ARGB6666_Premultiplied,
1291 0, // Format_RGB555,
1292 0, // Format_ARGB8555_Premultiplied,
1293 0, // Format_RGB888,
1294 0, // Format_RGB444,
1295 0 // Format_ARGB4444_Premultiplied,
1296 },
1297 { // Format_RGB888
1298 0, // Format_Invalid,
1299 0, // Format_Mono,
1300 0, // Format_MonoLSB,
1301 0, // Format_Indexed8,
1302 0, // Format_RGB32,
1303 0, // Format_ARGB32,
1304 0, // Format_ARGB32_Premultiplied,
1305 0, // Format_RGB16,
1306 0, // Format_ARGB8565_Premultiplied,
1307 0, // Format_RGB666,
1308 0, // Format_ARGB6666_Premultiplied,
1309 0, // Format_RGB555,
1310 0, // Format_ARGB8555_Premultiplied,
1311 0, // Format_RGB888,
1312 0, // Format_RGB444,
1313 0 // Format_ARGB4444_Premultiplied,
1314 },
1315 { // Format_RGB444
1316 0, // Format_Invalid,
1317 0, // Format_Mono,
1318 0, // Format_MonoLSB,
1319 0, // Format_Indexed8,
1320 0, // Format_RGB32,
1321 0, // Format_ARGB32,
1322 0, // Format_ARGB32_Premultiplied,
1323 0, // Format_RGB16,
1324 0, // Format_ARGB8565_Premultiplied,
1325 0, // Format_RGB666,
1326 0, // Format_ARGB6666_Premultiplied,
1327 0, // Format_RGB555,
1328 0, // Format_ARGB8555_Premultiplied,
1329 0, // Format_RGB888,
1330 0, // Format_RGB444,
1331 0 // Format_ARGB4444_Premultiplied,
1332 },
1333 { // Format_ARGB4444_Premultiplied
1334 0, // Format_Invalid,
1335 0, // Format_Mono,
1336 0, // Format_MonoLSB,
1337 0, // Format_Indexed8,
1338 0, // Format_RGB32,
1339 0, // Format_ARGB32,
1340 0, // Format_ARGB32_Premultiplied,
1341 0, // Format_RGB16,
1342 0, // Format_ARGB8565_Premultiplied,
1343 0, // Format_RGB666,
1344 0, // Format_ARGB6666_Premultiplied,
1345 0, // Format_RGB555,
1346 0, // Format_ARGB8555_Premultiplied,
1347 0, // Format_RGB888,
1348 0, // Format_RGB444,
1349 0 // Format_ARGB4444_Premultiplied,
1350 }
1351 };
1352
1353 SrcOverTransformFunc qTransformFunctions[QImage::NImageFormats][QImage::NImageFormats] = {
1354 { // Format_Invalid
1355 0, // Format_Invalid,
1356 0, // Format_Mono,
1357 0, // Format_MonoLSB,
1358 0, // Format_Indexed8,
1359 0, // Format_RGB32,
1360 0, // Format_ARGB32,
1361 0, // Format_ARGB32_Premultiplied,
1362 0, // Format_RGB16,
1363 0, // Format_ARGB8565_Premultiplied,
1364 0, // Format_RGB666,
1365 0, // Format_ARGB6666_Premultiplied,
1366 0, // Format_RGB555,
1367 0, // Format_ARGB8555_Premultiplied,
1368 0, // Format_RGB888,
1369 0, // Format_RGB444,
1370 0 // Format_ARGB4444_Premultiplied,
1371 },
1372 { // Format_Mono
1373 0, // Format_Invalid,
1374 0, // Format_Mono,
1375 0, // Format_MonoLSB,
1376 0, // Format_Indexed8,
1377 0, // Format_RGB32,
1378 0, // Format_ARGB32,
1379 0, // Format_ARGB32_Premultiplied,
1380 0, // Format_RGB16,
1381 0, // Format_ARGB8565_Premultiplied,
1382 0, // Format_RGB666,
1383 0, // Format_ARGB6666_Premultiplied,
1384 0, // Format_RGB555,
1385 0, // Format_ARGB8555_Premultiplied,
1386 0, // Format_RGB888,
1387 0, // Format_RGB444,
1388 0 // Format_ARGB4444_Premultiplied,
1389 },
1390 { // Format_MonoLSB
1391 0, // Format_Invalid,
1392 0, // Format_Mono,
1393 0, // Format_MonoLSB,
1394 0, // Format_Indexed8,
1395 0, // Format_RGB32,
1396 0, // Format_ARGB32,
1397 0, // Format_ARGB32_Premultiplied,
1398 0, // Format_RGB16,
1399 0, // Format_ARGB8565_Premultiplied,
1400 0, // Format_RGB666,
1401 0, // Format_ARGB6666_Premultiplied,
1402 0, // Format_RGB555,
1403 0, // Format_ARGB8555_Premultiplied,
1404 0, // Format_RGB888,
1405 0, // Format_RGB444,
1406 0 // Format_ARGB4444_Premultiplied,
1407 },
1408 { // Format_Indexed8
1409 0, // Format_Invalid,
1410 0, // Format_Mono,
1411 0, // Format_MonoLSB,
1412 0, // Format_Indexed8,
1413 0, // Format_RGB32,
1414 0, // Format_ARGB32,
1415 0, // Format_ARGB32_Premultiplied,
1416 0, // Format_RGB16,
1417 0, // Format_ARGB8565_Premultiplied,
1418 0, // Format_RGB666,
1419 0, // Format_ARGB6666_Premultiplied,
1420 0, // Format_RGB555,
1421 0, // Format_ARGB8555_Premultiplied,
1422 0, // Format_RGB888,
1423 0, // Format_RGB444,
1424 0 // Format_ARGB4444_Premultiplied,
1425 },
1426 { // Format_RGB32
1427 0, // Format_Invalid,
1428 0, // Format_Mono,
1429 0, // Format_MonoLSB,
1430 0, // Format_Indexed8,
1431 qt_transform_image_rgb32_on_rgb32, // Format_RGB32,
1432 0, // Format_ARGB32,
1433 qt_transform_image_argb32_on_argb32, // Format_ARGB32_Premultiplied,
1434 0, // Format_RGB16,
1435 0, // Format_ARGB8565_Premultiplied,
1436 0, // Format_RGB666,
1437 0, // Format_ARGB6666_Premultiplied,
1438 0, // Format_RGB555,
1439 0, // Format_ARGB8555_Premultiplied,
1440 0, // Format_RGB888,
1441 0, // Format_RGB444,
1442 0 // Format_ARGB4444_Premultiplied,
1443 },
1444 { // Format_ARGB32
1445 0, // Format_Invalid,
1446 0, // Format_Mono,
1447 0, // Format_MonoLSB,
1448 0, // Format_Indexed8,
1449 0, // Format_RGB32,
1450 0, // Format_ARGB32,
1451 0, // Format_ARGB32_Premultiplied,
1452 0, // Format_RGB16,
1453 0, // Format_ARGB8565_Premultiplied,
1454 0, // Format_RGB666,
1455 0, // Format_ARGB6666_Premultiplied,
1456 0, // Format_RGB555,
1457 0, // Format_ARGB8555_Premultiplied,
1458 0, // Format_RGB888,
1459 0, // Format_RGB444,
1460 0 // Format_ARGB4444_Premultiplied,
1461 },
1462 { // Format_ARGB32_Premultiplied
1463 0, // Format_Invalid,
1464 0, // Format_Mono,
1465 0, // Format_MonoLSB,
1466 0, // Format_Indexed8,
1467 qt_transform_image_rgb32_on_rgb32, // Format_RGB32,
1468 0, // Format_ARGB32,
1469 qt_transform_image_argb32_on_argb32, // Format_ARGB32_Premultiplied,
1470 0, // Format_RGB16,
1471 0, // Format_ARGB8565_Premultiplied,
1472 0, // Format_RGB666,
1473 0, // Format_ARGB6666_Premultiplied,
1474 0, // Format_RGB555,
1475 0, // Format_ARGB8555_Premultiplied,
1476 0, // Format_RGB888,
1477 0, // Format_RGB444,
1478 0 // Format_ARGB4444_Premultiplied,
1479 },
1480 { // Format_RGB16
1481 0, // Format_Invalid,
1482 0, // Format_Mono,
1483 0, // Format_MonoLSB,
1484 0, // Format_Indexed8,
1485 0, // Format_RGB32,
1486 0, // Format_ARGB32,
1487 qt_transform_image_argb32_on_rgb16, // Format_ARGB32_Premultiplied,
1488 qt_transform_image_rgb16_on_rgb16, // Format_RGB16,
1489 qt_transform_image_argb24_on_rgb16, // Format_ARGB8565_Premultiplied,
1490 0, // Format_RGB666,
1491 0, // Format_ARGB6666_Premultiplied,
1492 0, // Format_RGB555,
1493 0, // Format_ARGB8555_Premultiplied,
1494 0, // Format_RGB888,
1495 0, // Format_RGB444,
1496 0 // Format_ARGB4444_Premultiplied,
1497 },
1498 { // Format_ARGB8565_Premultiplied
1499 0, // Format_Invalid,
1500 0, // Format_Mono,
1501 0, // Format_MonoLSB,
1502 0, // Format_Indexed8,
1503 0, // Format_RGB32,
1504 0, // Format_ARGB32,
1505 0, // Format_ARGB32_Premultiplied,
1506 0, // Format_RGB16,
1507 0, // Format_ARGB8565_Premultiplied,
1508 0, // Format_RGB666,
1509 0, // Format_ARGB6666_Premultiplied,
1510 0, // Format_RGB555,
1511 0, // Format_ARGB8555_Premultiplied,
1512 0, // Format_RGB888,
1513 0, // Format_RGB444,
1514 0 // Format_ARGB4444_Premultiplied,
1515 },
1516 { // Format_RGB666
1517 0, // Format_Invalid,
1518 0, // Format_Mono,
1519 0, // Format_MonoLSB,
1520 0, // Format_Indexed8,
1521 0, // Format_RGB32,
1522 0, // Format_ARGB32,
1523 0, // Format_ARGB32_Premultiplied,
1524 0, // Format_RGB16,
1525 0, // Format_ARGB8565_Premultiplied,
1526 0, // Format_RGB666,
1527 0, // Format_ARGB6666_Premultiplied,
1528 0, // Format_RGB555,
1529 0, // Format_ARGB8555_Premultiplied,
1530 0, // Format_RGB888,
1531 0, // Format_RGB444,
1532 0 // Format_ARGB4444_Premultiplied,
1533 },
1534 { // Format_ARGB6666_Premultiplied
1535 0, // Format_Invalid,
1536 0, // Format_Mono,
1537 0, // Format_MonoLSB,
1538 0, // Format_Indexed8,
1539 0, // Format_RGB32,
1540 0, // Format_ARGB32,
1541 0, // Format_ARGB32_Premultiplied,
1542 0, // Format_RGB16,
1543 0, // Format_ARGB8565_Premultiplied,
1544 0, // Format_RGB666,
1545 0, // Format_ARGB6666_Premultiplied,
1546 0, // Format_RGB555,
1547 0, // Format_ARGB8555_Premultiplied,
1548 0, // Format_RGB888,
1549 0, // Format_RGB444,
1550 0 // Format_ARGB4444_Premultiplied,
1551 },
1552 { // Format_RGB555
1553 0, // Format_Invalid,
1554 0, // Format_Mono,
1555 0, // Format_MonoLSB,
1556 0, // Format_Indexed8,
1557 0, // Format_RGB32,
1558 0, // Format_ARGB32,
1559 0, // Format_ARGB32_Premultiplied,
1560 0, // Format_RGB16,
1561 0, // Format_ARGB8565_Premultiplied,
1562 0, // Format_RGB666,
1563 0, // Format_ARGB6666_Premultiplied,
1564 0, // Format_RGB555,
1565 0, // Format_ARGB8555_Premultiplied,
1566 0, // Format_RGB888,
1567 0, // Format_RGB444,
1568 0 // Format_ARGB4444_Premultiplied,
1569 },
1570 { // Format_ARGB8555_Premultiplied
1571 0, // Format_Invalid,
1572 0, // Format_Mono,
1573 0, // Format_MonoLSB,
1574 0, // Format_Indexed8,
1575 0, // Format_RGB32,
1576 0, // Format_ARGB32,
1577 0, // Format_ARGB32_Premultiplied,
1578 0, // Format_RGB16,
1579 0, // Format_ARGB8565_Premultiplied,
1580 0, // Format_RGB666,
1581 0, // Format_ARGB6666_Premultiplied,
1582 0, // Format_RGB555,
1583 0, // Format_ARGB8555_Premultiplied,
1584 0, // Format_RGB888,
1585 0, // Format_RGB444,
1586 0 // Format_ARGB4444_Premultiplied,
1587 },
1588 { // Format_RGB888
1589 0, // Format_Invalid,
1590 0, // Format_Mono,
1591 0, // Format_MonoLSB,
1592 0, // Format_Indexed8,
1593 0, // Format_RGB32,
1594 0, // Format_ARGB32,
1595 0, // Format_ARGB32_Premultiplied,
1596 0, // Format_RGB16,
1597 0, // Format_ARGB8565_Premultiplied,
1598 0, // Format_RGB666,
1599 0, // Format_ARGB6666_Premultiplied,
1600 0, // Format_RGB555,
1601 0, // Format_ARGB8555_Premultiplied,
1602 0, // Format_RGB888,
1603 0, // Format_RGB444,
1604 0 // Format_ARGB4444_Premultiplied,
1605 },
1606 { // Format_RGB444
1607 0, // Format_Invalid,
1608 0, // Format_Mono,
1609 0, // Format_MonoLSB,
1610 0, // Format_Indexed8,
1611 0, // Format_RGB32,
1612 0, // Format_ARGB32,
1613 0, // Format_ARGB32_Premultiplied,
1614 0, // Format_RGB16,
1615 0, // Format_ARGB8565_Premultiplied,
1616 0, // Format_RGB666,
1617 0, // Format_ARGB6666_Premultiplied,
1618 0, // Format_RGB555,
1619 0, // Format_ARGB8555_Premultiplied,
1620 0, // Format_RGB888,
1621 0, // Format_RGB444,
1622 0 // Format_ARGB4444_Premultiplied,
1623 },
1624 { // Format_ARGB4444_Premultiplied
1625 0, // Format_Invalid,
1626 0, // Format_Mono,
1627 0, // Format_MonoLSB,
1628 0, // Format_Indexed8,
1629 0, // Format_RGB32,
1630 0, // Format_ARGB32,
1631 0, // Format_ARGB32_Premultiplied,
1632 0, // Format_RGB16,
1633 0, // Format_ARGB8565_Premultiplied,
1634 0, // Format_RGB666,
1635 0, // Format_ARGB6666_Premultiplied,
1636 0, // Format_RGB555,
1637 0, // Format_ARGB8555_Premultiplied,
1638 0, // Format_RGB888,
1639 0, // Format_RGB444,
1640 0 // Format_ARGB4444_Premultiplied,
1641 }
1642 };
1643
1644 QT_END_NAMESPACE
1645