4#ifndef QPIXELLAYOUT_P_H
5#define QPIXELLAYOUT_P_H
18#include <QtCore/qlist.h>
19#include <QtGui/qimage.h>
20#include <QtGui/qrgba64.h>
21#include <QtGui/qrgbafloat.h>
22#include <QtCore/private/qglobal_p.h>
39template<
unsigned int Shift>
42 const uint alpha = qAlpha(p);
43 if (alpha == 255 || alpha == 0)
45 p = qUnpremultiply(p);
46 constexpr uint mult = 255 / (255 >> Shift);
47 const uint newAlpha = mult * (alpha >> Shift);
48 p = (p & ~0xff000000) | (newAlpha<<24);
49 return qPremultiply(p);
52template<
unsigned int Shift>
55 const uint alpha = p.alpha();
56 if (alpha == 65535 || alpha == 0)
59 constexpr uint mult = 65535 / (65535 >> Shift);
60 p.setAlpha(mult * (alpha >> Shift));
65inline uint qConvertArgb32ToA2rgb30<PixelOrderBGR>(QRgb c)
67 c = qRepremultiply<6>(c);
68 return (c & 0xc0000000)
69 | (((c << 22) & 0x3fc00000) | ((c << 14) & 0x00300000))
70 | (((c << 4) & 0x000ff000) | ((c >> 4) & 0x00000c00))
71 | (((c >> 14) & 0x000003fc) | ((c >> 22) & 0x00000003));
75inline uint qConvertArgb32ToA2rgb30<PixelOrderRGB>(QRgb c)
77 c = qRepremultiply<6>(c);
78 return (c & 0xc0000000)
79 | (((c << 6) & 0x3fc00000) | ((c >> 2) & 0x00300000))
80 | (((c << 4) & 0x000ff000) | ((c >> 4) & 0x00000c00))
81 | (((c << 2) & 0x000003fc) | ((c >> 6) & 0x00000003));
85inline uint qConvertRgb32ToRgb30<PixelOrderBGR>(QRgb c)
88 | (((c << 22) & 0x3fc00000) | ((c << 14) & 0x00300000))
89 | (((c << 4) & 0x000ff000) | ((c >> 4) & 0x00000c00))
90 | (((c >> 14) & 0x000003fc) | ((c >> 22) & 0x00000003));
94inline uint qConvertRgb32ToRgb30<PixelOrderRGB>(QRgb c)
97 | (((c << 6) & 0x3fc00000) | ((c >> 2) & 0x00300000))
98 | (((c << 4) & 0x000ff000) | ((c >> 4) & 0x00000c00))
99 | (((c << 2) & 0x000003fc) | ((c >> 6) & 0x00000003));
103inline QRgb qConvertA2rgb30ToArgb32<PixelOrderBGR>(uint c)
109 | ((c << 14) & 0x00ff0000)
110 | ((c >> 4) & 0x0000ff00)
111 | ((c >> 22) & 0x000000ff);
115inline QRgb qConvertA2rgb30ToArgb32<PixelOrderRGB>(uint c)
121 | ((c >> 6) & 0x00ff0000)
122 | ((c >> 4) & 0x0000ff00)
123 | ((c >> 2) & 0x000000ff);
129inline QRgba64 qConvertA2rgb30ToRgb64<PixelOrderBGR>(uint rgb)
131 quint16 alpha = rgb >> 30;
132 quint16 blue = (rgb >> 20) & 0x3ff;
133 quint16 green = (rgb >> 10) & 0x3ff;
134 quint16 red = rgb & 0x3ff;
136 alpha |= (alpha << 2);
137 alpha |= (alpha << 4);
138 alpha |= (alpha << 8);
139 red = (red << 6) | (red >> 4);
140 green = (green << 6) | (green >> 4);
141 blue = (blue << 6) | (blue >> 4);
142 return qRgba64(red, green, blue, alpha);
146inline QRgba64 qConvertA2rgb30ToRgb64<PixelOrderRGB>(uint rgb)
148 quint16 alpha = rgb >> 30;
149 quint16 red = (rgb >> 20) & 0x3ff;
150 quint16 green = (rgb >> 10) & 0x3ff;
151 quint16 blue = rgb & 0x3ff;
153 alpha |= (alpha << 2);
154 alpha |= (alpha << 4);
155 alpha |= (alpha << 8);
156 red = (red << 6) | (red >> 4);
157 green = (green << 6) | (green >> 4);
158 blue = (blue << 6) | (blue >> 4);
159 return qRgba64(red, green, blue, alpha);
165inline unsigned int qConvertRgb64ToRgb30<PixelOrderBGR>(QRgba64 c)
167 c = qRepremultiply<14>(c);
168 const uint a = c.alpha() >> 14;
169 const uint r = c.red() >> 6;
170 const uint g = c.green() >> 6;
171 const uint b = c.blue() >> 6;
172 return (a << 30) | (b << 20) | (g << 10) | r;
176inline unsigned int qConvertRgb64ToRgb30<PixelOrderRGB>(QRgba64 c)
178 c = qRepremultiply<14>(c);
179 const uint a = c.alpha() >> 14;
180 const uint r = c.red() >> 6;
181 const uint g = c.green() >> 6;
182 const uint b = c.blue() >> 6;
183 return (a << 30) | (r << 20) | (g << 10) | b;
188 return QRgbaFloat16::fromRgba64(c.red(), c.green(), c.blue(), c.alpha());
193 return QRgbaFloat32::fromRgba64(c.red(), c.green(), c.blue(), c.alpha());
198 const uint ag = c & 0xc00ffc00;
199 const uint rb = c & 0x3ff003ff;
200 return ag | (rb << 20) | (rb >> 20);
203#if Q_BYTE_ORDER == Q_BIG_ENDIAN
205 quint32 rgb = x >> 8;
211 quint32 rgb = x << 8;
216static inline quint32 RGBA2ARGB(quint32 x) {
218 quint32 ag = x & 0xff00ff00;
219 quint32 rg = x & 0x00ff00ff;
220 return ag | (rg << 16) | (rg >> 16);
223static inline quint32 ARGB2RGBA(quint32 x) {
230#define UNALIASED_CONVERSION_LOOP(buffer, src, count, conversion)
232 for (int i = 0
; i < count; ++i)
233 buffer[i] = conversion(buffer[i]);
235 for (int i = 0
; i < count; ++i)
236 buffer[i] = conversion(src[i]);
260 int index,
int count,
261 const QList<QRgb> *clut,
264 int count,
const QList<QRgb> *clut,
268 int index,
int count,
269 const QList<QRgb> *clut,
272 int count,
const QList<QRgb> *clut,
290typedef void (*
MemRotateFunc)(
const uchar *srcPixels,
int w,
int h,
int sbpl, uchar *destPixels,
int dbpl);
323#if QT_CONFIG(raster_fp)
324extern ConvertToFPFunc qConvertToRGBA32F[];
325extern FetchAndConvertPixelsFuncFP qFetchToRGBA32F[];
326extern ConvertAndStorePixelsFuncFP qStoreFromRGBA32F[];
constexpr QRgba64 unpremultiplied() const
constexpr QRgba64 premultiplied() const
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