3#include <private/qimagescale_p.h>
4#include <private/qdrawhelper_p.h>
5#include <private/qimage_p.h>
12#if QT_CONFIG(thread) && !defined(Q_OS_WASM)
15#include <private/qthreadpool_p.h>
84 int sw,
int sh,
int dh)
86 const unsigned int **
p;
94 p =
new const unsigned int* [dh+1];
96 int up =
qAbs(dh) >= sh;
97 val = up ? 0x8000 * sh / dh - 0x8000 : 0;
98 inc = (((
qint64)sh) << 16) / dh;
99 for (
int i = 0;
i < dh;
i++) {
104 for (
int i = dh / 2; --
i >= 0; ) {
105 const unsigned int *tmp =
p[
i];
106 p[
i] =
p[dh -
i - 1];
115 int *
p,
j = 0, rv = 0;
124 int up =
qAbs(dw) >= sw;
125 val = up ? 0x8000 * sw / dw - 0x8000 : 0;
126 inc = (((
qint64)sw) << 16) / dw;
127 for (
int i = 0;
i < dw;
i++) {
133 for (
int i = dw / 2; --
i >= 0; ) {
135 p[
i] =
p[dw -
i - 1];
144 int *
p,
j = 0, rv = 0;
156 for (
int i = 0;
i <
d;
i++) {
160 else if (
pos >= (
s - 1))
163 p[
j++] = (
val >> 8) - ((
val >> 8) & 0xffffff00);
170 int Cp = (((
d << 14) +
s - 1) /
s);
171 for (
int i = 0;
i <
d;
i++) {
172 int ap = ((0x10000 - (
val & 0xffff)) * Cp) >> 16;
173 p[
j] = ap | (Cp << 16);
180 for (
int i =
d / 2; --
i >= 0; ) {
203 int dw,
int dh,
char aa)
223 img.bytesPerLine() / 4,
img.height(), sch);
239 int dw,
int dh,
int dow,
int sow);
242 int dw,
int dh,
int dow,
int sow);
245 int dw,
int dh,
int dow,
int sow);
247#if defined(QT_COMPILER_SUPPORTS_SSE4_1)
249void qt_qimageScaleAARGBA_up_x_down_y_sse4(
QImageScaleInfo *isi,
unsigned int *dest,
250 int dw,
int dh,
int dow,
int sow);
252void qt_qimageScaleAARGBA_down_x_up_y_sse4(
QImageScaleInfo *isi,
unsigned int *dest,
253 int dw,
int dh,
int dow,
int sow);
255void qt_qimageScaleAARGBA_down_xy_sse4(
QImageScaleInfo *isi,
unsigned int *dest,
256 int dw,
int dh,
int dow,
int sow);
259#if defined(__ARM_NEON__)
261void qt_qimageScaleAARGBA_up_x_down_y_neon(
QImageScaleInfo *isi,
unsigned int *dest,
262 int dw,
int dh,
int dow,
int sow);
264void qt_qimageScaleAARGBA_down_x_up_y_neon(
QImageScaleInfo *isi,
unsigned int *dest,
265 int dw,
int dh,
int dow,
int sow);
267void qt_qimageScaleAARGBA_down_xy_neon(
QImageScaleInfo *isi,
unsigned int *dest,
268 int dw,
int dh,
int dow,
int sow);
274#if QT_CONFIG(thread) && !defined(Q_OS_WASM)
283 threadPool->
start([&,
y, yn]() {
284 scaleSection(
y,
y + yn);
299 int dw,
int dh,
int dow,
int sow)
301 const unsigned int **ypoints = isi->
ypoints;
307 auto scaleSection = [&] (
int yStart,
int yEnd) {
308 for (
int y = yStart;
y < yEnd; ++
y) {
310 const unsigned int *sptr = ypoints[
y];
311 unsigned int *dptr = dest + (
y * dow);
312 const int yap = yapoints[
y];
314 for (
int x = 0;
x < dw;
x++) {
315 const unsigned int *
pix = sptr + xpoints[
x];
316 const int xap = xapoints[
x];
324 for (
int x = 0;
x < dw;
x++) {
325 const unsigned int *
pix = sptr + xpoints[
x];
326 const int xap = xapoints[
x];
341 int dw,
int dh,
int dow,
int sow)
349#ifdef QT_COMPILER_SUPPORTS_SSE4_1
351 qt_qimageScaleAARGBA_up_x_down_y_sse4<false>(isi, dest, dw, dh, dow, sow);
353#elif defined(__ARM_NEON__)
355 qt_qimageScaleAARGBA_up_x_down_y_neon<false>(isi, dest, dw, dh, dow, sow);
362#ifdef QT_COMPILER_SUPPORTS_SSE4_1
364 qt_qimageScaleAARGBA_down_x_up_y_sse4<false>(isi, dest, dw, dh, dow, sow);
366#elif defined(__ARM_NEON__)
368 qt_qimageScaleAARGBA_down_x_up_y_neon<false>(isi, dest, dw, dh, dow, sow);
375#ifdef QT_COMPILER_SUPPORTS_SSE4_1
377 qt_qimageScaleAARGBA_down_xy_sse4<false>(isi, dest, dw, dh, dow, sow);
379#elif defined(__ARM_NEON__)
381 qt_qimageScaleAARGBA_down_xy_neon<false>(isi, dest, dw, dh, dow, sow);
395 for (
j = (1 << 14) - xyap;
j > Cxy;
j -= Cxy) {
410 int dw,
int dh,
int dow,
int sow)
412 const unsigned int **ypoints = isi->
ypoints;
418 auto scaleSection = [&] (
int yStart,
int yEnd) {
419 for (
int y = yStart;
y < yEnd; ++
y) {
420 int Cy = yapoints[
y] >> 16;
421 int yap = yapoints[
y] & 0xffff;
423 unsigned int *dptr = dest + (
y * dow);
424 for (
int x = 0;
x < dw;
x++) {
425 const unsigned int *sptr = ypoints[
y] + xpoints[
x];
429 int xap = xapoints[
x];
438 r = (
r + (rr * xap)) >> 8;
439 g = (
g + (gg * xap)) >> 8;
440 b = (
b + (bb * xap)) >> 8;
441 a = (
a + (aa * xap)) >> 8;
443 *dptr++ =
qRgba(
r >> 14,
g >> 14,
b >> 14,
a >> 14);
451 int dw,
int dh,
int dow,
int sow)
453 const unsigned int **ypoints = isi->
ypoints;
459 auto scaleSection = [&] (
int yStart,
int yEnd) {
460 for (
int y = yStart;
y < yEnd; ++
y) {
461 unsigned int *dptr = dest + (
y * dow);
462 for (
int x = 0;
x < dw;
x++) {
463 int Cx = xapoints[
x] >> 16;
464 int xap = xapoints[
x] & 0xffff;
466 const unsigned int *sptr = ypoints[
y] + xpoints[
x];
470 int yap = yapoints[
y];
479 r = (
r + (rr * yap)) >> 8;
480 g = (
g + (gg * yap)) >> 8;
481 b = (
b + (bb * yap)) >> 8;
482 a = (
a + (aa * yap)) >> 8;
484 *dptr =
qRgba(
r >> 14,
g >> 14,
b >> 14,
a >> 14);
493 int dw,
int dh,
int dow,
int sow)
495 const unsigned int **ypoints = isi->
ypoints;
500 auto scaleSection = [&] (
int yStart,
int yEnd) {
501 for (
int y = yStart;
y < yEnd; ++
y) {
502 int Cy = (yapoints[
y]) >> 16;
503 int yap = (yapoints[
y]) & 0xffff;
505 unsigned int *dptr = dest + (
y * dow);
506 for (
int x = 0;
x < dw;
x++) {
507 int Cx = xapoints[
x] >> 16;
508 int xap = xapoints[
x] & 0xffff;
510 const unsigned int *sptr = ypoints[
y] + xpoints[
x];
514 int r = ((
rx>>4) * yap);
515 int g = ((gx>>4) * yap);
516 int b = ((bx>>4) * yap);
517 int a = ((ax>>4) * yap);
520 for (
j = (1 << 14) - yap;
j > Cy;
j -= Cy) {
536 *dptr =
qRgba(
r >> 24,
g >> 24,
b >> 24,
a >> 24);
544#if QT_CONFIG(raster_64bit)
546 int dw,
int dh,
int dow,
int sow);
549 int dw,
int dh,
int dow,
int sow);
552 int dw,
int dh,
int dow,
int sow);
555 int dw,
int dh,
int dow,
int sow)
558 int *xpoints = isi->xpoints;
559 int *xapoints = isi->xapoints;
560 int *yapoints = isi->yapoints;
562 auto scaleSection = [&] (
int yStart,
int yEnd) {
563 for (
int y = yStart;
y < yEnd; ++
y) {
566 const int yap = yapoints[
y];
568 for (
int x = 0;
x < dw;
x++) {
570 const int xap = xapoints[
x];
578 for (
int x = 0;
x < dw;
x++) {
580 const int xap = xapoints[
x];
594 int dw,
int dh,
int dow,
int sow)
597 qt_qimageScaleRgba64_up_xy(isi, dest, dw, dh, dow, sow);
599 qt_qimageScaleRgba64_up_x_down_y(isi, dest, dw, dh, dow, sow);
601 qt_qimageScaleRgba64_down_x_up_y(isi, dest, dw, dh, dow, sow);
603 qt_qimageScaleRgba64_down_xy(isi, dest, dw, dh, dow, sow);
608 r =
pix->red() * xyap;
609 g =
pix->green() * xyap;
610 b =
pix->blue() * xyap;
611 a =
pix->alpha() * xyap;
613 for (
j = (1 << 14) - xyap;
j > Cxy;
j -= Cxy ){
615 r +=
pix->red() * Cxy;
616 g +=
pix->green() * Cxy;
617 b +=
pix->blue() * Cxy;
618 a +=
pix->alpha() * Cxy;
622 g +=
pix->green() *
j;
623 b +=
pix->blue() *
j;
624 a +=
pix->alpha() *
j;
628 int dw,
int dh,
int dow,
int sow)
635 auto scaleSection = [&] (
int yStart,
int yEnd) {
636 for (
int y = yStart;
y < yEnd; ++
y) {
637 int Cy = (yapoints[
y]) >> 16;
638 int yap = (yapoints[
y]) & 0xffff;
641 for (
int x = 0;
x < dw;
x++) {
642 const QRgba64 *sptr = ypoints[
y] + xpoints[
x];
644 qt_qimageScaleRgba64_helper(sptr, yap, Cy, sow,
r,
g,
b,
a);
646 int xap = xapoints[
x];
649 qt_qimageScaleRgba64_helper(sptr + 1, yap, Cy, sow, rr, gg, bb, aa);
655 r = (
r + (rr * xap)) >> 8;
656 g = (
g + (gg * xap)) >> 8;
657 b = (
b + (bb * xap)) >> 8;
658 a = (
a + (aa * xap)) >> 8;
660 *dptr++ =
qRgba64(
r >> 14,
g >> 14,
b >> 14,
a >> 14);
668 int dw,
int dh,
int dow,
int sow)
675 auto scaleSection = [&] (
int yStart,
int yEnd) {
676 for (
int y = yStart;
y < yEnd; ++
y) {
678 for (
int x = 0;
x < dw;
x++) {
679 int Cx = xapoints[
x] >> 16;
680 int xap = xapoints[
x] & 0xffff;
682 const QRgba64 *sptr = ypoints[
y] + xpoints[
x];
684 qt_qimageScaleRgba64_helper(sptr, xap, Cx, 1,
r,
g,
b,
a);
686 int yap = yapoints[
y];
689 qt_qimageScaleRgba64_helper(sptr + sow, xap, Cx, 1, rr, gg, bb, aa);
695 r = (
r + (rr * yap)) >> 8;
696 g = (
g + (gg * yap)) >> 8;
697 b = (
b + (bb * yap)) >> 8;
698 a = (
a + (aa * yap)) >> 8;
700 *dptr =
qRgba64(
r >> 14,
g >> 14,
b >> 14,
a >> 14);
709 int dw,
int dh,
int dow,
int sow)
716 auto scaleSection = [&] (
int yStart,
int yEnd) {
717 for (
int y = yStart;
y < yEnd; ++
y) {
718 int Cy = (yapoints[
y]) >> 16;
719 int yap = (yapoints[
y]) & 0xffff;
722 for (
int x = 0;
x < dw;
x++) {
723 int Cx = xapoints[
x] >> 16;
724 int xap = xapoints[
x] & 0xffff;
726 const QRgba64 *sptr = ypoints[
y] + xpoints[
x];
728 qt_qimageScaleRgba64_helper(sptr, xap, Cx, 1,
rx, gx, bx, ax);
735 for (
j = (1 << 14) - yap;
j > Cy;
j -= Cy) {
737 qt_qimageScaleRgba64_helper(sptr, xap, Cx, 1,
rx, gx, bx, ax);
744 qt_qimageScaleRgba64_helper(sptr, xap, Cx, 1,
rx, gx, bx, ax);
750 *dptr =
qRgba64(
r >> 28,
g >> 28,
b >> 28,
a >> 28);
759#if QT_CONFIG(raster_fp)
761 int dw,
int dh,
int dow,
int sow);
764 int dw,
int dh,
int dow,
int sow);
767 int dw,
int dh,
int dow,
int sow);
770 int dw,
int dh,
int dow,
int sow)
777 auto scaleSection = [&] (
int yStart,
int yEnd) {
778 for (
int y = yStart;
y < yEnd; ++
y) {
781 const int yap = yapoints[
y];
783 for (
int x = 0;
x < dw;
x++) {
785 const int xap = xapoints[
x];
787 *dptr = interpolate_4_pixels_rgba32f(
pix,
pix + sow, xap * 256, yap * 256);
789 *dptr = interpolate_rgba32f(
pix[0], 256 - yap,
pix[sow], yap);
793 for (
int x = 0;
x < dw;
x++) {
795 const int xap = xapoints[
x];
797 *dptr = interpolate_rgba32f(
pix[0], 256 - xap,
pix[1], xap);
809 int dw,
int dh,
int dow,
int sow)
812 qt_qimageScaleRgbaFP_up_xy(isi, dest, dw, dh, dow, sow);
814 qt_qimageScaleRgbaFP_up_x_down_y(isi, dest, dw, dh, dow, sow);
816 qt_qimageScaleRgbaFP_down_x_up_y(isi, dest, dw, dh, dow, sow);
818 qt_qimageScaleRgbaFP_down_xy(isi, dest, dw, dh, dow, sow);
821inline static void qt_qimageScaleRgbaFP_helper(
const QRgbaFloat32 *
pix,
int xyap,
int Cxy,
int step,
float &
r,
float &
g,
float &
b,
float &
a)
823 constexpr float f = (1.0f / float(1<<14));
824 const float xyapf = xyap *
f;
825 const float Cxyf = Cxy *
f;
826 r =
pix->red() * xyapf;
827 g =
pix->green() * xyapf;
828 b =
pix->blue() * xyapf;
829 a =
pix->alpha() * xyapf;
831 for (
j = (1 << 14) - xyap;
j > Cxy;
j -= Cxy ){
833 r +=
pix->red() * Cxyf;
834 g +=
pix->green() * Cxyf;
835 b +=
pix->blue() * Cxyf;
836 a +=
pix->alpha() * Cxyf;
839 const float jf =
j *
f;
840 r +=
pix->red() * jf;
841 g +=
pix->green() * jf;
842 b +=
pix->blue() * jf;
843 a +=
pix->alpha() * jf;
847 int dw,
int dh,
int dow,
int sow)
854 auto scaleSection = [&] (
int yStart,
int yEnd) {
855 for (
int y = yStart;
y < yEnd; ++
y) {
856 int Cy = (yapoints[
y]) >> 16;
857 int yap = (yapoints[
y]) & 0xffff;
860 for (
int x = 0;
x < dw;
x++) {
863 qt_qimageScaleRgbaFP_helper(sptr, yap, Cy, sow,
r,
g,
b,
a);
865 int xap = xapoints[
x];
866 float xapf = xap * (1.f / 256.f);
868 float rr, gg, bb, aa;
869 qt_qimageScaleRgbaFP_helper(sptr + 1, yap, Cy, sow, rr, gg, bb, aa);
871 r = (
r * (1.0f - xapf) + (rr * xapf));
872 g = (
g * (1.0f - xapf) + (gg * xapf));
873 b = (
b * (1.0f - xapf) + (bb * xapf));
874 a = (
a * (1.0f - xapf) + (aa * xapf));
884 int dw,
int dh,
int dow,
int sow)
891 auto scaleSection = [&] (
int yStart,
int yEnd) {
892 for (
int y = yStart;
y < yEnd; ++
y) {
894 for (
int x = 0;
x < dw;
x++) {
895 int Cx = xapoints[
x] >> 16;
896 int xap = xapoints[
x] & 0xffff;
900 qt_qimageScaleRgbaFP_helper(sptr, xap, Cx, 1,
r,
g,
b,
a);
902 int yap = yapoints[
y];
903 float yapf = yap * (1.f / 256.f);
905 float rr, gg, bb, aa;
906 qt_qimageScaleRgbaFP_helper(sptr + sow, xap, Cx, 1, rr, gg, bb, aa);
908 r = (
r * (1.0f - yapf) + (rr * yapf));
909 g = (
g * (1.0f - yapf) + (gg * yapf));
910 b = (
b * (1.0f - yapf) + (bb * yapf));
911 a = (
a * (1.0f - yapf) + (aa * yapf));
921 int dw,
int dh,
int dow,
int sow)
928 auto scaleSection = [&] (
int yStart,
int yEnd) {
929 constexpr float f = 1.f / float(1 << 14);
930 for (
int y = yStart;
y < yEnd; ++
y) {
931 int Cy = (yapoints[
y]) >> 16;
932 int yap = (yapoints[
y]) & 0xffff;
935 for (
int x = 0;
x < dw;
x++) {
936 int Cx = xapoints[
x] >> 16;
937 int xap = xapoints[
x] & 0xffff;
940 float rx, gx, bx, ax;
941 qt_qimageScaleRgbaFP_helper(sptr, xap, Cx, 1,
rx, gx, bx, ax);
943 const float yapf = yap *
f;
944 const float Cyf = Cy *
f;
950 for (
j = (1 << 14) - yap;
j > Cy;
j -= Cy) {
952 qt_qimageScaleRgbaFP_helper(sptr, xap, Cx, 1,
rx, gx, bx, ax);
959 qt_qimageScaleRgbaFP_helper(sptr, xap, Cx, 1,
rx, gx, bx, ax);
960 const float jf =
j *
f;
975 int dw,
int dh,
int dow,
int sow);
978 int dw,
int dh,
int dow,
int sow);
981 int dw,
int dh,
int dow,
int sow);
985 int dw,
int dh,
int dow,
int sow)
993#ifdef QT_COMPILER_SUPPORTS_SSE4_1
995 qt_qimageScaleAARGBA_up_x_down_y_sse4<true>(isi, dest, dw, dh, dow, sow);
997#elif defined(__ARM_NEON__)
999 qt_qimageScaleAARGBA_up_x_down_y_neon<true>(isi, dest, dw, dh, dow, sow);
1006#ifdef QT_COMPILER_SUPPORTS_SSE4_1
1008 qt_qimageScaleAARGBA_down_x_up_y_sse4<true>(isi, dest, dw, dh, dow, sow);
1010#elif defined(__ARM_NEON__)
1012 qt_qimageScaleAARGBA_down_x_up_y_neon<true>(isi, dest, dw, dh, dow, sow);
1019#ifdef QT_COMPILER_SUPPORTS_SSE4_1
1021 qt_qimageScaleAARGBA_down_xy_sse4<true>(isi, dest, dw, dh, dow, sow);
1023#elif defined(__ARM_NEON__)
1025 qt_qimageScaleAARGBA_down_xy_neon<true>(isi, dest, dw, dh, dow, sow);
1039 for (
j = (1 << 14) - xyap;
j > Cxy;
j -= Cxy) {
1052 int dw,
int dh,
int dow,
int sow)
1054 const unsigned int **ypoints = isi->
ypoints;
1060 auto scaleSection = [&] (
int yStart,
int yEnd) {
1061 for (
int y = yStart;
y < yEnd; ++
y) {
1062 int Cy = yapoints[
y] >> 16;
1063 int yap = yapoints[
y] & 0xffff;
1065 unsigned int *dptr = dest + (
y * dow);
1066 for (
int x = 0;
x < dw;
x++) {
1067 const unsigned int *sptr = ypoints[
y] + xpoints[
x];
1071 int xap = xapoints[
x];
1076 r =
r * (256 - xap);
1077 g =
g * (256 - xap);
1078 b =
b * (256 - xap);
1079 r = (
r + (rr * xap)) >> 8;
1080 g = (
g + (gg * xap)) >> 8;
1081 b = (
b + (bb * xap)) >> 8;
1083 *dptr++ =
qRgb(
r >> 14,
g >> 14,
b >> 14);
1091 int dw,
int dh,
int dow,
int sow)
1093 const unsigned int **ypoints = isi->
ypoints;
1099 auto scaleSection = [&] (
int yStart,
int yEnd) {
1100 for (
int y = yStart;
y < yEnd; ++
y) {
1101 unsigned int *dptr = dest + (
y * dow);
1102 for (
int x = 0;
x < dw;
x++) {
1103 int Cx = xapoints[
x] >> 16;
1104 int xap = xapoints[
x] & 0xffff;
1106 const unsigned int *sptr = ypoints[
y] + xpoints[
x];
1110 int yap = yapoints[
y];
1115 r =
r * (256 - yap);
1116 g =
g * (256 - yap);
1117 b =
b * (256 - yap);
1118 r = (
r + (rr * yap)) >> 8;
1119 g = (
g + (gg * yap)) >> 8;
1120 b = (
b + (bb * yap)) >> 8;
1122 *dptr++ =
qRgb(
r >> 14,
g >> 14,
b >> 14);
1130 int dw,
int dh,
int dow,
int sow)
1132 const unsigned int **ypoints = isi->
ypoints;
1137 auto scaleSection = [&] (
int yStart,
int yEnd) {
1138 for (
int y = yStart;
y < yEnd; ++
y) {
1139 int Cy = yapoints[
y] >> 16;
1140 int yap = yapoints[
y] & 0xffff;
1142 unsigned int *dptr = dest + (
y * dow);
1143 for (
int x = 0;
x < dw;
x++) {
1144 int Cx = xapoints[
x] >> 16;
1145 int xap = xapoints[
x] & 0xffff;
1147 const unsigned int *sptr = ypoints[
y] + xpoints[
x];
1151 int r = (
rx >> 4) * yap;
1152 int g = (gx >> 4) * yap;
1153 int b = (bx >> 4) * yap;
1156 for (
j = (1 << 14) - yap;
j > Cy;
j -= Cy) {
1160 r += (
rx >> 4) * Cy;
1161 g += (gx >> 4) * Cy;
1162 b += (bx >> 4) * Cy;
1171 *dptr =
qRgb(
r >> 24,
g >> 24,
b >> 24);
1182 if (
src.isNull() || dw <= 0 || dh <= 0)
1185 int w =
src.width();
1186 int h =
src.height();
1194 qWarning(
"QImage: out of memory, returning null");
1199#if QT_CONFIG(raster_fp)
1202 dw, dh, dw,
src.bytesPerLine() / 16);
1205#if QT_CONFIG(raster_64bit)
1206 if (
src.depth() > 32)
1207 qt_qimageScaleRgba64(scaleinfo, (
QRgba64 *)
buffer.scanLine(0),
1208 dw, dh, dw,
src.bytesPerLine() / 8);
1211 if (
src.hasAlphaChannel())
1213 dw, dh, dw,
src.bytesPerLine() / 4);
1216 dw, dh, dw,
src.bytesPerLine() / 4);
void acquire(int n=1)
Tries to acquire n resources guarded by the semaphore.
void release(int n=1)
Releases n resources guarded by the semaphore.
static QThreadPool * qtGuiInstance()
Returns the QThreadPool instance for Qt Gui.
void start(QRunnable *runnable, int priority=0)
Reserves a thread and uses it to run runnable, unless this thread will make the current thread count ...
bool contains(const QThread *thread) const
static QThread * currentThread()
static QImageScaleInfo * qimageCalcScaleInfo(const QImage &img, int sw, int sh, int dw, int dh, char aa)
static int * qimageCalcXPoints(int sw, int dw)
static QImageScaleInfo * qimageFreeScaleInfo(QImageScaleInfo *isi)
static int * qimageCalcApoints(int s, int d, int up)
static const unsigned int ** qimageCalcYPoints(const unsigned int *src, int sw, int sh, int dh)
Combined button and popup list for selecting options.
static uint INTERPOLATE_PIXEL_256(uint x, uint a, uint y, uint b)
static uint interpolate_4_pixels(uint tl, uint tr, uint bl, uint br, uint distx, uint disty)
static QRgba64 interpolate_4_pixels_rgb64(const QRgba64 t[], const QRgba64 b[], uint distx, uint disty)
static QRgba64 interpolate256(QRgba64 x, uint alpha1, QRgba64 y, uint alpha2)
bool qt_fpColorPrecision(QImage::Format format)
static void multithread_pixels_function(QImageScaleInfo *isi, int dh, const T &scaleSection)
static void qt_qimageScaleAARGB_down_xy(QImageScaleInfo *isi, unsigned int *dest, int dw, int dh, int dow, int sow)
static void qt_qimageScaleAARGBA_helper(const unsigned int *pix, int xyap, int Cxy, int step, int &r, int &g, int &b, int &a)
static void qt_qimageScaleAARGBA_up_xy(QImageScaleInfo *isi, unsigned int *dest, int dw, int dh, int dow, int sow)
static void qt_qimageScaleAARGB_helper(const unsigned int *pix, int xyap, int Cxy, int step, int &r, int &g, int &b)
QImage qSmoothScaleImage(const QImage &src, int dw, int dh)
static void qt_qimageScaleAARGB_down_x_up_y(QImageScaleInfo *isi, unsigned int *dest, int dw, int dh, int dow, int sow)
static void qt_qimageScaleAARGB(QImageScaleInfo *isi, unsigned int *dest, int dw, int dh, int dow, int sow)
static void qt_qimageScaleAARGBA_down_x_up_y(QImageScaleInfo *isi, unsigned int *dest, int dw, int dh, int dow, int sow)
static void qt_qimageScaleAARGB_up_x_down_y(QImageScaleInfo *isi, unsigned int *dest, int dw, int dh, int dow, int sow)
static void qt_qimageScaleAARGBA_down_xy(QImageScaleInfo *isi, unsigned int *dest, int dw, int dh, int dow, int sow)
static void qt_qimageScaleAARGBA(QImageScaleInfo *isi, unsigned int *dest, int dw, int dh, int dow, int sow)
static void qt_qimageScaleAARGBA_up_x_down_y(QImageScaleInfo *isi, unsigned int *dest, int dw, int dh, int dow, int sow)
constexpr const T & qMax(const T &a, const T &b)
constexpr T qAbs(const T &t)
GLboolean GLboolean GLboolean b
GLint GLint GLint GLint GLint x
[0]
GLfloat GLfloat GLfloat w
[0]
GLboolean GLboolean GLboolean GLboolean a
[7]
GLfloat GLfloat GLfloat GLfloat h
constexpr QRgb qRgb(int r, int g, int b)
constexpr int qRed(QRgb rgb)
constexpr int qGreen(QRgb rgb)
constexpr QRgb qRgba(int r, int g, int b, int a)
constexpr int qBlue(QRgb rgb)
constexpr int qAlpha(QRgb rgb)
constexpr QRgba64 qRgba64(quint16 r, quint16 g, quint16 b, quint16 a)
#define qCpuHasFeature(feature)
const unsigned int ** ypoints