5#ifndef QPIXELLAYOUT_P_H
6#define QPIXELLAYOUT_P_H
19#include <QtCore/qlist.h>
20#include <QtGui/qimage.h>
21#include <QtGui/qrgba64.h>
22#include <QtGui/qrgbafloat.h>
23#include <QtCore/private/qglobal_p.h>
40template<
unsigned int Shift>
43 const uint alpha = qAlpha(p);
44 if (alpha == 255 || alpha == 0)
46 p = qUnpremultiply(p);
47 constexpr uint mult = 255 / (255 >> Shift);
48 const uint newAlpha = mult * (alpha >> Shift);
49 p = (p & ~0xff000000) | (newAlpha<<24);
50 return qPremultiply(p);
53template<
unsigned int Shift>
56 const uint alpha = p.alpha();
57 if (alpha == 65535 || alpha == 0)
60 constexpr uint mult = 65535 / (65535 >> Shift);
61 p.setAlpha(mult * (alpha >> Shift));
66inline uint qConvertArgb32ToA2rgb30<PixelOrderBGR>(QRgb c)
68 c = qRepremultiply<6>(c);
69 return (c & 0xc0000000)
70 | (((c << 22) & 0x3fc00000) | ((c << 14) & 0x00300000))
71 | (((c << 4) & 0x000ff000) | ((c >> 4) & 0x00000c00))
72 | (((c >> 14) & 0x000003fc) | ((c >> 22) & 0x00000003));
76inline uint qConvertArgb32ToA2rgb30<PixelOrderRGB>(QRgb c)
78 c = qRepremultiply<6>(c);
79 return (c & 0xc0000000)
80 | (((c << 6) & 0x3fc00000) | ((c >> 2) & 0x00300000))
81 | (((c << 4) & 0x000ff000) | ((c >> 4) & 0x00000c00))
82 | (((c << 2) & 0x000003fc) | ((c >> 6) & 0x00000003));
86inline uint qConvertRgb32ToRgb30<PixelOrderBGR>(QRgb c)
89 | (((c << 22) & 0x3fc00000) | ((c << 14) & 0x00300000))
90 | (((c << 4) & 0x000ff000) | ((c >> 4) & 0x00000c00))
91 | (((c >> 14) & 0x000003fc) | ((c >> 22) & 0x00000003));
95inline uint qConvertRgb32ToRgb30<PixelOrderRGB>(QRgb c)
98 | (((c << 6) & 0x3fc00000) | ((c >> 2) & 0x00300000))
99 | (((c << 4) & 0x000ff000) | ((c >> 4) & 0x00000c00))
100 | (((c << 2) & 0x000003fc) | ((c >> 6) & 0x00000003));
104inline QRgb qConvertA2rgb30ToArgb32<PixelOrderBGR>(uint c)
110 | ((c << 14) & 0x00ff0000)
111 | ((c >> 4) & 0x0000ff00)
112 | ((c >> 22) & 0x000000ff);
116inline QRgb qConvertA2rgb30ToArgb32<PixelOrderRGB>(uint c)
122 | ((c >> 6) & 0x00ff0000)
123 | ((c >> 4) & 0x0000ff00)
124 | ((c >> 2) & 0x000000ff);
130inline QRgba64 qConvertA2rgb30ToRgb64<PixelOrderBGR>(uint rgb)
132 quint16 alpha = rgb >> 30;
133 quint16 blue = (rgb >> 20) & 0x3ff;
134 quint16 green = (rgb >> 10) & 0x3ff;
135 quint16 red = rgb & 0x3ff;
137 alpha |= (alpha << 2);
138 alpha |= (alpha << 4);
139 alpha |= (alpha << 8);
140 red = (red << 6) | (red >> 4);
141 green = (green << 6) | (green >> 4);
142 blue = (blue << 6) | (blue >> 4);
143 return qRgba64(red, green, blue, alpha);
147inline QRgba64 qConvertA2rgb30ToRgb64<PixelOrderRGB>(uint rgb)
149 quint16 alpha = rgb >> 30;
150 quint16 red = (rgb >> 20) & 0x3ff;
151 quint16 green = (rgb >> 10) & 0x3ff;
152 quint16 blue = rgb & 0x3ff;
154 alpha |= (alpha << 2);
155 alpha |= (alpha << 4);
156 alpha |= (alpha << 8);
157 red = (red << 6) | (red >> 4);
158 green = (green << 6) | (green >> 4);
159 blue = (blue << 6) | (blue >> 4);
160 return qRgba64(red, green, blue, alpha);
166inline unsigned int qConvertRgb64ToRgb30<PixelOrderBGR>(QRgba64 c)
168 c = qRepremultiply<14>(c);
169 const uint a = c.alpha() >> 14;
170 const uint r = c.red() >> 6;
171 const uint g = c.green() >> 6;
172 const uint b = c.blue() >> 6;
173 return (a << 30) | (b << 20) | (g << 10) | r;
177inline unsigned int qConvertRgb64ToRgb30<PixelOrderRGB>(QRgba64 c)
179 c = qRepremultiply<14>(c);
180 const uint a = c.alpha() >> 14;
181 const uint r = c.red() >> 6;
182 const uint g = c.green() >> 6;
183 const uint b = c.blue() >> 6;
184 return (a << 30) | (r << 20) | (g << 10) | b;
189 return QRgbaFloat16::fromRgba64(c.red(), c.green(), c.blue(), c.alpha());
194 return QRgbaFloat32::fromRgba64(c.red(), c.green(), c.blue(), c.alpha());
199 const uint ag = c & 0xc00ffc00;
200 const uint rb = c & 0x3ff003ff;
201 return ag | (rb << 20) | (rb >> 20);
204#if Q_BYTE_ORDER == Q_BIG_ENDIAN
206 quint32 rgb = x >> 8;
212 quint32 rgb = x << 8;
217static inline quint32 RGBA2ARGB(quint32 x) {
219 quint32 ag = x & 0xff00ff00;
220 quint32 rg = x & 0x00ff00ff;
221 return ag | (rg << 16) | (rg >> 16);
224static inline quint32 ARGB2RGBA(quint32 x) {
231#define UNALIASED_CONVERSION_LOOP(buffer, src, count, conversion)
233 for (int i = 0
; i < count; ++i)
234 buffer[i] = conversion(buffer[i]);
236 for (int i = 0
; i < count; ++i)
237 buffer[i] = conversion(src[i]);
261 int index,
int count,
262 const QList<QRgb> *clut,
265 int count,
const QList<QRgb> *clut,
269 int index,
int count,
270 const QList<QRgb> *clut,
273 int count,
const QList<QRgb> *clut,
291typedef void (*
MemRotateFunc)(
const uchar *srcPixels,
int w,
int h,
int sbpl, uchar *destPixels,
int dbpl);
324#if QT_CONFIG(raster_fp)
325extern ConvertToFPFunc qConvertToRGBA32F[];
326extern FetchAndConvertPixelsFuncFP qFetchToRGBA32F[];
327extern ConvertAndStorePixelsFuncFP qStoreFromRGBA32F[];
constexpr QRgba64 unpremultiplied() const
constexpr QRgba64 premultiplied() const
Combined button and popup list for selecting options.
QRgbaFloat< float > QRgbaFloat32
static QT_BEGIN_NAMESPACE const int numCompositionFunctions
constexpr QRgbaFloat32 qConvertRgb64ToRgbaF32(QRgba64 c)
const uint * qt_convertRGBA8888ToARGB32PM(uint *buffer, const uint *src, int count)
QPixelLayout qPixelLayouts[]
static quint32 RGBA2ARGB(quint32 x)
QRgba64 qRepremultiply(QRgba64 p)
#define UNALIASED_CONVERSION_LOOP(buffer, src, count, conversion)
const uint *(QT_FASTCALL * FetchAndConvertPixelsFunc)(uint *buffer, const uchar *src, int index, int count, const QList< QRgb > *clut, QDitherInfo *dither)
ConvertAndStorePixelsFunc64 qStoreFromRGBA64PM[QImage::NImageFormats]
uint qConvertArgb32ToA2rgb30(QRgb)
constexpr QRgbaFloat16 qConvertRgb64ToRgbaF16(QRgba64 c)
void qt_convertRGBA64ToARGB32(uint *dst, const QRgba64 *src, int count)
static quint32 ARGB2RGBA(quint32 x)
QRgb qConvertA2rgb30ToArgb32(uint c)
MemRotateFunc qMemRotateFunctions[QPixelLayout::BPPCount][3]
void(* MemRotateFunc)(const uchar *srcPixels, int w, int h, int sbpl, uchar *destPixels, int dbpl)
unsigned int qConvertRgb64ToRgb30(QRgba64)
QRgba64 qConvertA2rgb30ToRgb64(uint rgb)
QRgb qRepremultiply(QRgb p)
const uint * qt_convertARGB32ToARGB32PM(uint *buffer, const uint *src, int count)
uint qRgbSwapRgb30(uint c)
uint qConvertRgb32ToRgb30(QRgb)
ConvertFunc convertToARGB32PM
ConvertAndStorePixelsFunc storeFromARGB32PM
ConvertTo64Func convertToRGBA64PM
FetchAndConvertPixelsFunc64 fetchToRGBA64PM
FetchAndConvertPixelsFunc fetchToARGB32PM
ConvertAndStorePixelsFunc storeFromRGB32