6#ifndef iipr_CPixelManip_included
7#define iipr_CPixelManip_included
11#include <QtCore/QtGlobal>
35 Rgba(quint8 r, quint8 g, quint8 b, quint8 a = 255)
54 Rgb(quint8 r, quint8 g, quint8 b)
64 template <
typename IntType,
int Shift,
bool DoCropMin = true,
bool DoCropMax = true>
78 :
m_gray(IntType(value) << Shift)
83 :
m_gray(IntType(value) << Shift)
88 :
m_gray(IntType(value) << Shift)
93 :
m_gray(IntType(value) << Shift)
98 :
m_gray(IntType(value) << Shift)
103 :
m_gray(IntType(value * (1 << Shift)))
114 return m_gray == (IntType(value) << Shift);
119 return m_gray == IntType(value * (1 << Shift));
129 return m_gray != (IntType(value) << Shift);
134 return m_gray != IntType(value * (1 << Shift));
174 m_gray += IntType(value) << Shift;
181 m_gray += IntType(value * (1 << Shift));
195 m_gray -= IntType(value) << Shift;
202 m_gray -= IntType(value * (1 << Shift));
245 if (DoCropMin && (
m_gray < 0)){
248 if (DoCropMax && (
m_gray > (IntType(0xff) << Shift))){
252 return quint8(
m_gray >> Shift);
257 if (DoCropMin && (
m_gray < 0)){
260 if (DoCropMin && (
m_gray > (IntType(0xffff) << Shift))){
264 return quint16(
m_gray >> Shift);
269 if (DoCropMin && (
m_gray < 0)){
273 return quint32(
m_gray >> Shift);
280 if (DoCropMin && (
m_gray < 0)){
283 else if (DoCropMin && (
m_gray > (0xff << Shift))){
287 grayValue = quint8(
m_gray >> Shift);
290 return Rgba(grayValue, grayValue, grayValue);
297 template <
typename IntType,
int Shift,
bool DoCropMin = true,
bool DoCropMax = true>
311 :
m_r(IntType(value.
m_r) << Shift),
m_g(IntType(value.
m_g) << Shift),
m_b(IntType(value.
m_b) << Shift)
316 :
m_r(IntType(value.
m_r) << Shift),
m_g(IntType(value.
m_g) << Shift),
m_b(IntType(value.
m_b) << Shift)
321 :
m_r(IntType(value) << Shift),
m_g(IntType(value) << Shift),
m_b(IntType(value) << Shift)
326 :
m_r(IntType(value) << Shift),
m_g(IntType(value) << Shift),
m_b(IntType(value) << Shift)
331 :
m_r(IntType(value) << Shift),
m_g(IntType(value) << Shift),
m_b(IntType(value) << Shift)
336 :
m_r(IntType(value) << Shift),
m_g(IntType(value) << Shift),
m_b(IntType(value) << Shift)
341 :
m_r(IntType(value) << Shift),
m_g(IntType(value) << Shift),
m_b(IntType(value) << Shift)
346 :
m_r(IntType(value * (1 << Shift))),
m_g(IntType(value * (1 << Shift))),
m_b(IntType(value * (1 << Shift)))
357 IntType gray = (IntType(value) << Shift);
359 return (
m_r == gray) && (
m_g == gray) && (
m_b == gray);
364 IntType gray = IntType(value * (1 << Shift));
366 return (
m_r == gray) && (
m_g == gray) && (
m_b == gray);
376 IntType gray = (IntType(value) << Shift);
378 return (
m_r != gray) || (
m_g != gray) || (
m_b != gray);
383 IntType gray = IntType(value * (1 << Shift));
385 return (
m_r != gray) || (
m_g != gray) || (
m_b != gray);
408 m_r += IntType(value.
m_r) << Shift;
409 m_g += IntType(value.
m_g) << Shift;
410 m_b += IntType(value.
m_b) << Shift;
417 IntType gray = IntType(value) << Shift;
427 IntType gray = IntType(value * (1 << Shift));
446 m_r -= IntType(value.
m_r) << Shift;
447 m_g -= IntType(value.
m_g) << Shift;
448 m_b -= IntType(value.
m_b) << Shift;
455 IntType gray = IntType(value) << Shift;
465 IntType gray = IntType(value * (1 << Shift));
475 m_r = IntType(quint64(
m_r) * quint64(value.
m_r) >> Shift);;
476 m_g = IntType(quint64(
m_g) * quint64(value.
m_g) >> Shift);;
477 m_b = IntType(quint64(
m_b) * quint64(value.
m_b) >> Shift);;
484 m_r *= IntType(value);
485 m_g *= IntType(value);
486 m_b *= IntType(value);
493 m_r = IntType(
m_r * value);
494 m_g = IntType(
m_g * value);
495 m_b = IntType(
m_b * value);
511 m_r = IntType(
m_r / value);
512 m_g = IntType(
m_g / value);
513 m_b = IntType(
m_b / value);
520 quint64 grayValue = (quint64(
m_r) + quint64(
m_g) + quint64(
m_b)) / 3;
522 if (DoCropMin && (grayValue < 0)){
525 if (DoCropMin && (grayValue > (0xff << Shift))){
529 return quint8(grayValue >> Shift);
534 quint64 grayValue = (quint64(
m_r) + quint64(
m_g) + quint64(
m_b)) / 3;
536 if (DoCropMin && (grayValue < 0)){
539 if (DoCropMin && (grayValue > (0xffff << Shift))){
543 return quint16(grayValue >> Shift);
548 quint64 grayValue = (quint64(
m_r) + quint64(
m_g) + quint64(
m_b)) / 3;
550 if (DoCropMin && (grayValue < 0)){
554 return quint32(grayValue >> Shift);
559 return (
float(
m_r) +
float(
m_g) +
float(
m_b)) / (3 << Shift);
564 return (
double(
m_r) +
double(
m_g) +
double(
m_b)) / (3 << Shift);
570 if (DoCropMin && (red < 0)){
573 else if (DoCropMin && (red > (0xff << Shift))){
578 if (DoCropMin && (green < 0)){
581 else if (DoCropMin && (green > (0xff << Shift))){
586 if (DoCropMin && (blue < 0)){
589 else if (DoCropMin && (blue > (0xff << Shift))){
593 return Rgba(quint8(red >> Shift), quint8(green >> Shift), quint8(blue >> Shift));
599 if (DoCropMin && (red < 0)){
602 else if (DoCropMin && (red > (0xff << Shift))){
607 if (DoCropMin && (green < 0)){
610 else if (DoCropMin && (green > (0xff << Shift))){
615 if (DoCropMin && (blue < 0)){
618 else if (DoCropMin && (blue > (0xff << Shift))){
622 return Rgb(quint8(red >> Shift), quint8(green >> Shift), quint8(blue >> Shift));
631 template <
typename IntType,
int Shift,
bool DoCropMin = true,
bool DoCropMax = true>
649 m_a(IntType(255) << Shift)
655 m_a(IntType(255) << Shift)
661 m_a(IntType(255) << Shift)
667 m_a(IntType(255) << Shift)
673 m_a(IntType(255) << Shift)
679 m_a(IntType(255) << Shift)
685 m_a(IntType(255) << Shift)
696 IntType gray = (IntType(value) << Shift);
703 IntType gray = IntType(value * (1 << Shift));
715 IntType gray = (IntType(value) << Shift);
722 IntType gray = IntType(value * (1 << Shift));
740 IntType a = (
m_a + value.
m_a) / 2;
753 IntType a = (
m_a + (IntType(value.
m_a) << Shift)) / 2;
766 IntType gray_corr = (IntType(value) * IntType(255) << Shift);
767 IntType a = (
m_a + (IntType(255) << Shift)) / 2;
780 IntType gray_corr = IntType(value * (255 << Shift));
781 IntType a = (
m_a + (IntType(255) << Shift)) / 2;
830 if (DoCropMin && (red < 0)){
833 else if (DoCropMin && (red > (0xff << Shift))){
838 if (DoCropMin && (green < 0)){
841 else if (DoCropMin && (green > (0xff << Shift))){
846 if (DoCropMin && (blue < 0)){
849 else if (DoCropMin && (blue > (0xff << Shift))){
853 return Rgba(quint8(red >> Shift), quint8(green >> Shift), quint8(blue >> Shift), quint8(
m_a >> Shift));
bool operator==(int value)
GrayCropAccum32 & operator/=(int value)
bool operator!=(int value)
bool operator!=(const GrayCropAccum32 &value)
GrayCropAccum32 & operator*=(unsigned int value)
GrayCropAccum32(quint64 value)
GrayCropAccum32 & operator-=(unsigned int value)
GrayCropAccum32 & operator*=(double value)
GrayCropAccum32 & operator*=(const GrayCropAccum32 &value)
GrayCropAccum32(quint32 value)
bool operator!=(double value)
GrayCropAccum32 & operator+=(const GrayCropAccum32 &value)
GrayCropAccum32(int value)
bool operator==(double value)
GrayCropAccum32 & operator=(const GrayCropAccum32 &value)
GrayCropAccum32(double value)
GrayCropAccum32(quint16 value)
GrayCropAccum32(quint8 value)
GrayCropAccum32 & operator/=(double value)
GrayCropAccum32 & operator+=(double value)
GrayCropAccum32 & operator-=(double value)
bool operator==(const GrayCropAccum32 &value)
GrayCropAccum32 & operator+=(unsigned int value)
GrayCropAccum32 & operator-=(const GrayCropAccum32 &value)
GrayCropAccum32(const GrayCropAccum32 &value)
RgbCropAccum32(quint16 value)
RgbCropAccum32(double value)
RgbCropAccum32(const RgbCropAccum32 &value)
RgbCropAccum32 & operator+=(const RgbCropAccum32 &value)
RgbCropAccum32 & operator-=(const RgbCropAccum32 &value)
RgbCropAccum32 & operator-=(double value)
RgbCropAccum32(quint32 value)
RgbCropAccum32 & operator*=(int value)
RgbCropAccum32(quint8 value)
RgbCropAccum32(const Rgba &value)
bool operator!=(const RgbCropAccum32 &value)
RgbCropAccum32 & operator-=(const Rgba &value)
RgbCropAccum32 & operator/=(int value)
RgbCropAccum32 & operator*=(const RgbCropAccum32 &value)
bool operator==(const RgbCropAccum32 &value)
RgbCropAccum32 & operator/=(double value)
RgbCropAccum32(quint64 value)
RgbCropAccum32 & operator=(const RgbCropAccum32 &value)
RgbCropAccum32 & operator-=(quint32 value)
bool operator!=(double value)
RgbCropAccum32 & operator+=(const Rgba &value)
RgbCropAccum32 & operator+=(unsigned int value)
RgbCropAccum32(int value)
RgbCropAccum32 & operator+=(double value)
bool operator!=(int value)
bool operator==(double value)
bool operator==(int value)
RgbCropAccum32(const Rgb &value)
RgbCropAccum32 & operator*=(double value)
Rgb(quint8 r, quint8 g, quint8 b)
RgbaCropAccum32(quint32 value)
bool operator==(double value)
RgbaCropAccum32(int value)
bool operator==(int value)
RgbaCropAccum32(quint16 value)
RgbaCropAccum32 & operator+=(double value)
bool operator!=(double value)
RgbaCropAccum32 & operator+=(const RgbaCropAccum32 &value)
RgbaCropAccum32(const Rgba &value)
RgbaCropAccum32 & operator*=(int value)
RgbaCropAccum32 & operator=(const RgbaCropAccum32 &value)
RgbaCropAccum32(quint8 value)
RgbaCropAccum32 & operator/=(double value)
RgbaCropAccum32 & operator*=(double value)
bool operator!=(int value)
RgbaCropAccum32(quint64 value)
bool operator!=(const RgbaCropAccum32 &value)
RgbaCropAccum32(double value)
RgbaCropAccum32 & operator+=(unsigned int value)
RgbaCropAccum32 & operator*=(const RgbaCropAccum32 &value)
RgbaCropAccum32(const RgbaCropAccum32 &value)
RgbCropAccum32< IntType, Shift, DoCropMin, DoCropMax > BaseClass
bool operator==(const RgbaCropAccum32 &value)
RgbaCropAccum32 & operator+=(const Rgba &value)
RgbaCropAccum32 & operator/=(int value)
Rgba(quint8 r, quint8 g, quint8 b, quint8 a=255)
Set pixel performance optimized classes designed to be used for pixel manipulation in template proces...
Contains the image processing classes.