From 246de922e616a1843b779d312408ec288adc6fbe Mon Sep 17 00:00:00 2001 From: Pierre Joye Date: Wed, 27 Feb 2013 10:37:48 +0100 Subject: [PATCH] - add image flip API support --- ext/gd/libgd/gd_transform.c | 73 +++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 ext/gd/libgd/gd_transform.c diff --git a/ext/gd/libgd/gd_transform.c b/ext/gd/libgd/gd_transform.c new file mode 100644 index 0000000000..9051525eec --- /dev/null +++ b/ext/gd/libgd/gd_transform.c @@ -0,0 +1,73 @@ +#include "gd.h" + +void gdImageFlipVertical(gdImagePtr im) +{ + register int x, y; + + if (im->trueColor) { + for (y = 0; y < im->sy / 2; y++) { + int *row_dst = im->tpixels[y]; + int *row_src = im->tpixels[im->sy - 1 - y]; + for (x = 0; x < im->sx; x++) { + register int p; + p = row_dst[x]; + row_dst[x] = im->tpixels[im->sy - 1 - y][x]; + row_src[x] = p; + } + } + } else { + unsigned char p; + for (y = 0; y < im->sy / 2; y++) { + for (x = 0; x < im->sx; x++) { + p = im->pixels[y][x]; + im->pixels[y][x] = im->pixels[im->sy - 1 - y][x]; + im->pixels[im->sy - 1 - y][x] = p; + } + } + } + return; +} + +void gdImageFlipHorizontal(gdImagePtr im) +{ + + int x, y; + + if (im->trueColor) { + int *px1, *px2, tmp; + + for (y = 0; y < im->sy; y++) { + px1 = im->tpixels[y]; + px2 = im->tpixels[y] + im->sx - 1; + for (x = 0; x < (im->sx >> 1); x++) { + tmp = *px1; + *px1 = *px2; + *px2 = tmp; + px1++; + px2--; + } + } + } else { + unsigned char *px1, *px2, tmp; + + for (y = 0; y < im->sy; y++) { + px1 = im->pixels[y]; + px2 = im->pixels[y] + im->sx - 1; + for (x = 0; x < (im->sx >> 1); x++) { + tmp = *px1; + *px1 = *px2; + *px2 = tmp; + px1++; + px2--; + } + } + } +} + +void gdImageFlipBoth(gdImagePtr im) +{ + gdImageFlipVertical(im); + gdImageFlipHorizontal(im); +} + + -- 2.40.0