gd_transform.c 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #include "gd.h"
  2. void gdImageFlipVertical(gdImagePtr im)
  3. {
  4. register int x, y;
  5. if (im->trueColor) {
  6. for (y = 0; y < im->sy / 2; y++) {
  7. int *row_dst = im->tpixels[y];
  8. int *row_src = im->tpixels[im->sy - 1 - y];
  9. for (x = 0; x < im->sx; x++) {
  10. register int p;
  11. p = row_dst[x];
  12. row_dst[x] = im->tpixels[im->sy - 1 - y][x];
  13. row_src[x] = p;
  14. }
  15. }
  16. } else {
  17. unsigned char p;
  18. for (y = 0; y < im->sy / 2; y++) {
  19. for (x = 0; x < im->sx; x++) {
  20. p = im->pixels[y][x];
  21. im->pixels[y][x] = im->pixels[im->sy - 1 - y][x];
  22. im->pixels[im->sy - 1 - y][x] = p;
  23. }
  24. }
  25. }
  26. return;
  27. }
  28. void gdImageFlipHorizontal(gdImagePtr im)
  29. {
  30. int x, y;
  31. if (im->trueColor) {
  32. int *px1, *px2, tmp;
  33. for (y = 0; y < im->sy; y++) {
  34. px1 = im->tpixels[y];
  35. px2 = im->tpixels[y] + im->sx - 1;
  36. for (x = 0; x < (im->sx >> 1); x++) {
  37. tmp = *px1;
  38. *px1 = *px2;
  39. *px2 = tmp;
  40. px1++;
  41. px2--;
  42. }
  43. }
  44. } else {
  45. unsigned char *px1, *px2, tmp;
  46. for (y = 0; y < im->sy; y++) {
  47. px1 = im->pixels[y];
  48. px2 = im->pixels[y] + im->sx - 1;
  49. for (x = 0; x < (im->sx >> 1); x++) {
  50. tmp = *px1;
  51. *px1 = *px2;
  52. *px2 = tmp;
  53. px1++;
  54. px2--;
  55. }
  56. }
  57. }
  58. }
  59. void gdImageFlipBoth(gdImagePtr im)
  60. {
  61. gdImageFlipVertical(im);
  62. gdImageFlipHorizontal(im);
  63. }