44#define SWAP_32(x) (((x) >> 24) | (((x) & 0x00ff0000) >> 8) | (((x) & 0x0000ff00) << 8) | ((x) << 24))
58int SDL_imageFilterAdd(
unsigned char *Src1,
unsigned char *Src2,
unsigned char *Dest,
unsigned int length)
60 unsigned int i, istart;
61 unsigned char *cursrc1, *cursrc2, *curdst;
65 if ((Src1 == NULL) || (Src2 == NULL) || (Dest == NULL))
77 for (i = istart; i < length; i++) {
78 result = (int) *cursrc1 + (
int) *cursrc2;
81 *curdst = (
unsigned char) result;
101int SDL_imageFilterMean(
unsigned char *Src1,
unsigned char *Src2,
unsigned char *Dest,
unsigned int length)
103 static unsigned char Mask[8] = { 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F };
104 unsigned int i, istart;
105 unsigned char *cursrc1, *cursrc2, *curdst;
109 if ((Src1 == NULL) || (Src2 == NULL) || (Dest == NULL))
121 for (i = istart; i < length; i++) {
122 result = (int) *cursrc1 / 2 + (
int) *cursrc2 / 2;
123 *curdst = (
unsigned char) result;
143int SDL_imageFilterSub(
unsigned char *Src1,
unsigned char *Src2,
unsigned char *Dest,
unsigned int length)
145 unsigned int i, istart;
146 unsigned char *cursrc1, *cursrc2, *curdst;
150 if ((Src1 == NULL) || (Src2 == NULL) || (Dest == NULL))
162 for (i = istart; i < length; i++) {
163 result = (int) cursrc1[i] - (
int) cursrc2[i];
166 curdst[i] = (
unsigned char) result;
183 unsigned int i, istart;
184 unsigned char *cursrc1, *cursrc2, *curdst;
188 if ((Src1 == NULL) || (Src2 == NULL) || (Dest == NULL))
200 for (i = istart; i < length; i++) {
201 result = abs((
int) *cursrc1 - (
int) *cursrc2);
202 *curdst = (
unsigned char) result;
222int SDL_imageFilterMult(
unsigned char *Src1,
unsigned char *Src2,
unsigned char *Dest,
unsigned int length)
224 unsigned int i, istart;
225 unsigned char *cursrc1, *cursrc2, *curdst;
229 if ((Src1 == NULL) || (Src2 == NULL) || (Dest == NULL))
241 for (i = istart; i < length; i++) {
242 result = (int) *cursrc1 * (
int) *cursrc2;
245 *curdst = (
unsigned char) result;
267 unsigned int i, istart;
268 unsigned char *cursrc1, *cursrc2, *curdst;
271 if ((Src1 == NULL) || (Src2 == NULL) || (Dest == NULL))
283 for (i = istart; i < length; i++) {
284 *curdst = (int)*cursrc1 * (
int)*cursrc2;
306 unsigned int i, istart;
307 unsigned char *cursrc1, *cursrc2, *curdst;
311 if ((Src1 == NULL) || (Src2 == NULL) || (Dest == NULL))
323 for (i = istart; i < length; i++) {
324 result = ((int) *cursrc1 / 2) * (
int) *cursrc2;
327 *curdst = (
unsigned char) result;
349 unsigned int i, istart;
350 unsigned char *cursrc1, *cursrc2, *curdst;
354 if ((Src1 == NULL) || (Src2 == NULL) || (Dest == NULL))
366 for (i = istart; i < length; i++) {
367 result = ((int) *cursrc1 / 2) * ((
int) *cursrc2 / 2);
370 *curdst = (
unsigned char) result;
392 unsigned int i, istart;
393 unsigned char *cursrc1, *cursrc2, *curdst;
396 if ((Src1 == NULL) || (Src2 == NULL) || (Dest == NULL))
408 for (i = istart; i < length; i++) {
409 *curdst = (*cursrc1) & (*cursrc2);
431 unsigned int i, istart;
432 unsigned char *cursrc1, *cursrc2, *curdst;
435 if ((Src1 == NULL) || (Src2 == NULL) || (Dest == NULL))
447 for (i = istart; i < length; i++) {
448 *curdst = *cursrc1 | *cursrc2;
468int SDL_imageFilterDiv(
unsigned char *Src1,
unsigned char *Src2,
unsigned char *Dest,
unsigned int length)
470 unsigned int i, istart;
471 unsigned char *cursrc1, *cursrc2, *curdst;
474 if ((Src1 == NULL) || (Src2 == NULL) || (Dest == NULL))
485 for (i = istart; i < length; i++) {
489 *curdst = (int)*cursrc1 / (
int)*cursrc2;
513 unsigned int i, istart;
514 unsigned char *cursrc1, *curdst;
517 if ((Src1 == NULL) || (Dest == NULL))
528 for (i = istart; i < length; i++) {
529 *curdst = ~(*cursrc1);
550 unsigned int i, istart;
552 unsigned char *cursrc1, *curdest;
556 if ((Src1 == NULL) || (Dest == NULL))
563 memcpy(Src1, Dest, length);
574 for (i = istart; i < length; i++) {
575 result = (int) *cursrc1 + iC;
578 *curdest = (
unsigned char) result;
597int SDL_imageFilterAddUint(
unsigned char *Src1,
unsigned char *Dest,
unsigned int length,
unsigned int bpp,
unsigned int C)
599 unsigned int i, j, istart, D;
601 unsigned char *cursrc1;
602 unsigned char *curdest;
606 if ((Src1 == NULL) || (Dest == NULL))
613 memcpy(Src1, Dest, length);
623 for (k = bpp; k >= 0; k--) {
624 iC[k] = (int) ((C >> (8*(bpp - k))) & 0xff);
628 for (i = istart; i < length; i += bpp) {
629 for (j = 0; j < bpp; j++) {
630 if ((i+j) < length) {
631 result = cursrc1[i+j] + iC[j];
635 curdest[i+j] = (
unsigned char) result;
654 static unsigned char Mask[8] = { 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F };
655 unsigned int i, istart;
657 unsigned char *cursrc1;
658 unsigned char *curdest;
662 if ((Src1 == NULL) || (Dest == NULL))
674 for (i = istart; i < length; i++) {
675 result = (int) (*cursrc1 / 2) + iC;
678 *curdest = (
unsigned char) result;
699 unsigned int i, istart;
701 unsigned char *cursrc1;
702 unsigned char *curdest;
706 if ((Src1 == NULL) || (Dest == NULL))
713 memcpy(Src1, Dest, length);
724 for (i = istart; i < length; i++) {
725 result = (int) *cursrc1 - iC;
728 *curdest = (
unsigned char) result;
747int SDL_imageFilterSubUint(
unsigned char *Src1,
unsigned char *Dest,
unsigned int length,
unsigned int bpp,
unsigned int C)
749 unsigned int i, j, istart, D;
751 unsigned char *cursrc1;
752 unsigned char *curdest;
756 if ((Src1 == NULL) || (Dest == NULL))
763 memcpy(Src1, Dest, length);
773 for (k = bpp; k >= 0; k--) {
774 iC[k] = (int) ((C >> (8*(bpp - k))) & 0xff);
778 for (i = istart; i < length; i += bpp) {
779 for (j = 0; j < bpp; j++) {
780 if ((i+j) < length) {
781 result = cursrc1[i+j] - iC[j];
785 curdest[i+j] = (
unsigned char) result;
805 static unsigned char Mask[8] = { 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F };
806 unsigned int i, istart;
807 unsigned char *cursrc1;
808 unsigned char *curdest;
811 if ((Src1 == NULL) || (Dest == NULL))
823 memcpy(Src1, Dest, length);
833 for (i = istart; i < length; i++) {
834 *curdest = (
unsigned char) *cursrc1 >> N;
855 unsigned int i, istart;
856 unsigned char *cursrc1, *curdest;
857 unsigned int *icursrc1, *icurdest;
861 if ((Src1 == NULL) || (Dest == NULL))
872 memcpy(Src1, Dest, length);
882 icursrc1=(
unsigned int *)cursrc1;
883 icurdest=(
unsigned int *)curdest;
884 for (i = istart; i < length; i += 4) {
886 result = ((
unsigned int)*icursrc1 >> N);
909 unsigned int i, istart;
911 unsigned char *cursrc1;
912 unsigned char *curdest;
916 if ((Src1 == NULL) || (Dest == NULL))
923 memcpy(Src1, Dest, length);
934 for (i = istart; i < length; i++) {
935 result = (int) *cursrc1 * iC;
938 *curdest = (
unsigned char) result;
961 unsigned int i, istart;
963 unsigned char *cursrc1;
964 unsigned char *curdest;
968 if ((Src1 == NULL) || (Dest == NULL))
979 if ((N == 0) && (C == 1)) {
980 memcpy(Src1, Dest, length);
991 for (i = istart; i < length; i++) {
992 result = (int) (*cursrc1 >> N) * iC;
995 *curdest = (
unsigned char) result;
1016 static unsigned char Mask[8] = { 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE };
1017 unsigned int i, istart;
1018 unsigned char *cursrc1, *curdest;
1022 if ((Src1 == NULL) || (Dest == NULL))
1033 memcpy(Src1, Dest, length);
1043 for (i = istart; i < length; i++) {
1044 result = ((int) *cursrc1 << N) & 0xff;
1045 *curdest = (
unsigned char) result;
1066 unsigned int i, istart;
1067 unsigned char *cursrc1, *curdest;
1068 unsigned int *icursrc1, *icurdest;
1069 unsigned int result;
1072 if ((Src1 == NULL) || (Dest == NULL))
1083 memcpy(Src1, Dest, length);
1093 icursrc1=(
unsigned int *)cursrc1;
1094 icurdest=(
unsigned int *)curdest;
1095 for (i = istart; i < length; i += 4) {
1097 result = ((
unsigned int)*icursrc1 << N);
1120 unsigned int i, istart;
1121 unsigned char *cursrc1, *curdest;
1125 if ((Src1 == NULL) || (Dest == NULL))
1136 memcpy(Src1, Dest, length);
1146 for (i = istart; i < length; i++) {
1147 result = (int) *cursrc1 << N;
1150 *curdest = (
unsigned char) result;
1171 unsigned int i, istart;
1172 unsigned char *cursrc1;
1173 unsigned char *curdest;
1176 if ((Src1 == NULL) || (Dest == NULL))
1183 memset(Dest, 255, length);
1193 for (i = istart; i < length; i++) {
1194 *curdest = (
unsigned char)(((
unsigned char)*cursrc1 >= T) ? 255 : 0);
1217 unsigned int i, istart;
1218 unsigned char *cursrc1;
1219 unsigned char *curdest;
1222 if ((Src1 == NULL) || (Dest == NULL))
1228 if ((Tmin == 0) && (Tmax == 25)) {
1229 memcpy(Src1, Dest, length);
1239 for (i = istart; i < length; i++) {
1240 if (*cursrc1 < Tmin) {
1242 }
else if (*cursrc1 > Tmax) {
1245 *curdest = *cursrc1;
1271 unsigned int i, istart;
1272 unsigned char *cursrc;
1273 unsigned char *curdest;
1278 if ((Src == NULL) || (Dest == NULL))
1294 for (i = istart; i < length; i++) {
1295 result = factor * ((int) (*cursrc) - Cmin) + Nmin;
1298 *curdest = (
unsigned char) result;
1324 signed short *Kernel,
unsigned char Divisor)
1327 if ((Src == NULL) || (Dest == NULL) || (Kernel == NULL))
1330 if ((columns < 3) || (rows < 3) || (Divisor == 0))
1352 signed short *Kernel,
unsigned char Divisor)
1355 if ((Src == NULL) || (Dest == NULL) || (Kernel == NULL))
1358 if ((columns < 5) || (rows < 5) || (Divisor == 0))
1380 signed short *Kernel,
unsigned char Divisor)
1383 if ((Src == NULL) || (Dest == NULL) || (Kernel == NULL))
1386 if ((columns < 7) || (rows < 7) || (Divisor == 0))
1408 signed short *Kernel,
unsigned char Divisor)
1411 if ((Src == NULL) || (Dest == NULL) || (Kernel == NULL))
1414 if ((columns < 9) || (rows < 9) || (Divisor == 0))
1436 signed short *Kernel,
unsigned char NRightShift)
1439 if ((Src == NULL) || (Dest == NULL) || (Kernel == NULL))
1442 if ((columns < 3) || (rows < 3) || (NRightShift > 7))
1464 signed short *Kernel,
unsigned char NRightShift)
1467 if ((Src == NULL) || (Dest == NULL) || (Kernel == NULL))
1470 if ((columns < 5) || (rows < 5) || (NRightShift > 7))
1492 signed short *Kernel,
unsigned char NRightShift)
1495 if ((Src == NULL) || (Dest == NULL) || (Kernel == NULL))
1498 if ((columns < 7) || (rows < 7) || (NRightShift > 7))
1520 signed short *Kernel,
unsigned char NRightShift)
1523 if ((Src == NULL) || (Dest == NULL) || (Kernel == NULL))
1526 if ((columns < 9) || (rows < 9) || (NRightShift > 7))
1550 if ((Src == NULL) || (Dest == NULL))
1553 if ((columns < 8) || (rows < 3))
1574 unsigned char NRightShift)
1577 if ((Src == NULL) || (Dest == NULL))
1579 if ((columns < 8) || (rows < 3) || (NRightShift > 7))
int SDL_imageFilterSobelX(unsigned char *Src, unsigned char *Dest, int rows, int columns)
Filter using SobelX: Dij = saturation255( ... )
int SDL_imageFilterMultByByte(unsigned char *Src1, unsigned char *Dest, unsigned int length, unsigned char C)
Filter using MultByByte: D = saturation255(S * C)
int SDL_imageFilterShiftRightAndMultByByte(unsigned char *Src1, unsigned char *Dest, unsigned int length, unsigned char N, unsigned char C)
Filter using ShiftRightAndMultByByte: D = saturation255((S >> N) * C)
int SDL_imageFilterSobelXShiftRight(unsigned char *Src, unsigned char *Dest, int rows, int columns, unsigned char NRightShift)
Filter using SobelXShiftRight: Dij = saturation255( ... )
int SDL_imageFilterDiv(unsigned char *Src1, unsigned char *Src2, unsigned char *Dest, unsigned int length)
Filter using Div: D = S1 / S2.
int SDL_imageFilterShiftLeftUint(unsigned char *Src1, unsigned char *Dest, unsigned int length, unsigned char N)
Filter using ShiftLeftUint: D = ((uint)S << N)
int SDL_imageFilterMultDivby4(unsigned char *Src1, unsigned char *Src2, unsigned char *Dest, unsigned int length)
Filter using MultDivby4: D = saturation255(S1/2 * S2/2)
int SDL_imageFilterConvolveKernel7x7Divide(unsigned char *Src, unsigned char *Dest, int rows, int columns, signed short *Kernel, unsigned char Divisor)
Filter using ConvolveKernel7x7Divide: Dij = saturation0and255( ... )
int SDL_imageFilterSubByte(unsigned char *Src1, unsigned char *Dest, unsigned int length, unsigned char C)
Filter using SubByte: D = saturation0(S - C)
int SDL_imageFilterSub(unsigned char *Src1, unsigned char *Src2, unsigned char *Dest, unsigned int length)
Filter using Sub: D = saturation0(S1 - S2)
int SDL_imageFilterShiftLeftByte(unsigned char *Src1, unsigned char *Dest, unsigned int length, unsigned char N)
Filter using ShiftLeftByte: D = (S << N)
int SDL_imageFilterAbsDiff(unsigned char *Src1, unsigned char *Src2, unsigned char *Dest, unsigned int length)
Filter using AbsDiff: D = | S1 - S2 |.
int SDL_imageFilterConvolveKernel7x7ShiftRight(unsigned char *Src, unsigned char *Dest, int rows, int columns, signed short *Kernel, unsigned char NRightShift)
Filter using ConvolveKernel7x7ShiftRight: Dij = saturation0and255( ... )
int SDL_imageFilterConvolveKernel5x5ShiftRight(unsigned char *Src, unsigned char *Dest, int rows, int columns, signed short *Kernel, unsigned char NRightShift)
Filter using ConvolveKernel5x5ShiftRight: Dij = saturation0and255( ... )
int SDL_imageFilterShiftRightUint(unsigned char *Src1, unsigned char *Dest, unsigned int length, unsigned char N)
Filter using ShiftRightUint: D = saturation0((uint)S[i] >> N)
int SDL_imageFilterSubUint(unsigned char *Src1, unsigned char *Dest, unsigned int length, unsigned int bpp, unsigned int C)
Filter using SubUint: D = saturation0(S[i] - Cs[i % BPP])
int SDL_imageFilterBitOr(unsigned char *Src1, unsigned char *Src2, unsigned char *Dest, unsigned int length)
Filter using BitOr: D = S1 | S2.
int SDL_imageFilterMultNor(unsigned char *Src1, unsigned char *Src2, unsigned char *Dest, unsigned int length)
Filter using MultNor: D = S1 * S2.
int SDL_imageFilterShiftRight(unsigned char *Src1, unsigned char *Dest, unsigned int length, unsigned char N)
Filter using ShiftRight: D = saturation0(S >> N)
int SDL_imageFilterConvolveKernel9x9ShiftRight(unsigned char *Src, unsigned char *Dest, int rows, int columns, signed short *Kernel, unsigned char NRightShift)
Filter using ConvolveKernel9x9ShiftRight: Dij = saturation255( ... )
int SDL_imageFilterMultDivby2(unsigned char *Src1, unsigned char *Src2, unsigned char *Dest, unsigned int length)
Filter using MultDivby2: D = saturation255(S1/2 * S2)
int SDL_imageFilterAddByte(unsigned char *Src1, unsigned char *Dest, unsigned int length, unsigned char C)
Filter using AddByte: D = saturation255(S + C)
int SDL_imageFilterBitAnd(unsigned char *Src1, unsigned char *Src2, unsigned char *Dest, unsigned int length)
Filter using BitAnd: D = S1 & S2.
int SDL_imageFilterConvolveKernel3x3Divide(unsigned char *Src, unsigned char *Dest, int rows, int columns, signed short *Kernel, unsigned char Divisor)
Filter using ConvolveKernel3x3Divide: Dij = saturation0and255( ... )
int SDL_imageFilterBinarizeUsingThreshold(unsigned char *Src1, unsigned char *Dest, unsigned int length, unsigned char T)
Filter using BinarizeUsingThreshold: D = (S >= T) ? 255:0.
int SDL_imageFilterAddUint(unsigned char *Src1, unsigned char *Dest, unsigned int length, unsigned int bpp, unsigned int C)
Filter using AddUint: D = saturation255((S[i] + Cs[i % BPP])
int SDL_imageFilterShiftLeft(unsigned char *Src1, unsigned char *Dest, unsigned int length, unsigned char N)
Filter ShiftLeft: D = saturation255(S << N)
int SDL_imageFilterAdd(unsigned char *Src1, unsigned char *Src2, unsigned char *Dest, unsigned int length)
Filter using Add: D = saturation255(S1 + S2)
int SDL_imageFilterNormalizeLinear(unsigned char *Src, unsigned char *Dest, unsigned int length, int Cmin, int Cmax, int Nmin, int Nmax)
Filter using NormalizeLinear: D = saturation255((Nmax - Nmin)/(Cmax - Cmin)*(S - Cmin) + Nmin)
int SDL_imageFilterClipToRange(unsigned char *Src1, unsigned char *Dest, unsigned int length, unsigned char Tmin, unsigned char Tmax)
Filter using ClipToRange: D = (S >= Tmin) & (S <= Tmax) S:Tmin | Tmax.
int SDL_imageFilterAddByteToHalf(unsigned char *Src1, unsigned char *Dest, unsigned int length, unsigned char C)
Filter using AddByteToHalf: D = saturation255(S/2 + C)
int SDL_imageFilterConvolveKernel3x3ShiftRight(unsigned char *Src, unsigned char *Dest, int rows, int columns, signed short *Kernel, unsigned char NRightShift)
Filter using ConvolveKernel3x3ShiftRight: Dij = saturation0and255( ... )
int SDL_imageFilterBitNegation(unsigned char *Src1, unsigned char *Dest, unsigned int length)
Filter using BitNegation: D = !S.
int SDL_imageFilterConvolveKernel5x5Divide(unsigned char *Src, unsigned char *Dest, int rows, int columns, signed short *Kernel, unsigned char Divisor)
Filter using ConvolveKernel5x5Divide: Dij = saturation0and255( ... )
int SDL_imageFilterMean(unsigned char *Src1, unsigned char *Src2, unsigned char *Dest, unsigned int length)
Filter using Mean: D = S1/2 + S2/2.
int SDL_imageFilterConvolveKernel9x9Divide(unsigned char *Src, unsigned char *Dest, int rows, int columns, signed short *Kernel, unsigned char Divisor)
Filter using ConvolveKernel9x9Divide: Dij = saturation0and255( ... )
int SDL_imageFilterMult(unsigned char *Src1, unsigned char *Src2, unsigned char *Dest, unsigned int length)
Filter using Mult: D = saturation255(S1 * S2)