account for pixel size in ImagingTransformAffine()

This commit is contained in:
Yay295 2022-08-23 15:14:50 -05:00
parent 5b94bf1ce8
commit c6287ca7bc

View File

@ -909,11 +909,12 @@ ImagingTransformAffine(
arithmetics*/ arithmetics*/
ImagingSectionCookie cookie; ImagingSectionCookie cookie;
int x, y; int x, y, b;
int xin, yin; int xin, yin;
int xsize, ysize; int xsize, ysize;
double xx, yy; double xx, yy;
double xo, yo; double xo, yo;
int pixelsize;
if (filterid || imIn->type == IMAGING_TYPE_SPECIAL) { if (filterid || imIn->type == IMAGING_TYPE_SPECIAL) {
return ImagingGenericTransform( return ImagingGenericTransform(
@ -962,42 +963,35 @@ ImagingTransformAffine(
xo = a[2] + a[1] * 0.5 + a[0] * 0.5; xo = a[2] + a[1] * 0.5 + a[0] * 0.5;
yo = a[5] + a[4] * 0.5 + a[3] * 0.5; yo = a[5] + a[4] * 0.5 + a[3] * 0.5;
#define AFFINE_TRANSFORM(pixel, image) \ pixelsize = imOut->pixelsize;
for (y = y0; y < y1; y++) { \
pixel *out; \
xx = xo; \
yy = yo; \
out = imOut->image[y]; \
if (fill && x1 > x0) { \
memset(out + x0, 0, (x1 - x0) * sizeof(pixel)); \
} \
for (x = x0; x < x1; x++, out++) { \
xin = COORD(xx); \
if (xin >= 0 && xin < xsize) { \
yin = COORD(yy); \
if (yin >= 0 && yin < ysize) { \
*out = imIn->image[yin][xin]; \
} \
} \
xx += a[0]; \
yy += a[3]; \
} \
xo += a[1]; \
yo += a[4]; \
}
ImagingSectionEnter(&cookie); ImagingSectionEnter(&cookie);
for (y = y0; y < y1; y++) {
if (imIn->image8) { UINT8 *out;
AFFINE_TRANSFORM(UINT8, image8) xx = xo;
} else { yy = yo;
AFFINE_TRANSFORM(INT32, image32) out = (UINT8 *)imOut->image[y];
if (fill && x1 > x0) {
memset(out + x0 * pixelsize, 0, (x1 - x0) * pixelsize);
}
for (x = x0; x < x1; x++) {
xin = COORD(xx);
if (xin >= 0 && xin < xsize) {
yin = COORD(yy);
if (yin >= 0 && yin < ysize) {
for (b = 0; b < pixelsize; b++) {
out[x * pixelsize + b] = (UINT8 *)imIn->image[yin][xin * pixelsize + b];
}
}
}
xx += a[0];
yy += a[3];
}
xo += a[1];
yo += a[4];
} }
ImagingSectionLeave(&cookie); ImagingSectionLeave(&cookie);
#undef AFFINE_TRANSFORM
return imOut; return imOut;
} }