Copy.c 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. /*
  2. * The Python Imaging Library
  3. * $Id$
  4. *
  5. * copy image
  6. *
  7. * history:
  8. * 95-11-26 fl Moved from Imaging.c
  9. * 97-05-12 fl Added ImagingCopy2
  10. * 97-08-28 fl Allow imOut == NULL in ImagingCopy2
  11. *
  12. * Copyright (c) Fredrik Lundh 1995-97.
  13. * Copyright (c) Secret Labs AB 1997.
  14. *
  15. * See the README file for details on usage and redistribution.
  16. */
  17. #include "Imaging.h"
  18. static Imaging
  19. _copy(Imaging imOut, Imaging imIn) {
  20. ImagingSectionCookie cookie;
  21. int y;
  22. if (!imIn) {
  23. return (Imaging)ImagingError_ValueError(NULL);
  24. }
  25. imOut = ImagingNew2Dirty(imIn->mode, imOut, imIn);
  26. if (!imOut) {
  27. return NULL;
  28. }
  29. ImagingCopyPalette(imOut, imIn);
  30. ImagingSectionEnter(&cookie);
  31. if (imIn->block != NULL && imOut->block != NULL) {
  32. memcpy(imOut->block, imIn->block, imIn->ysize * imIn->linesize);
  33. } else {
  34. for (y = 0; y < imIn->ysize; y++) {
  35. memcpy(imOut->image[y], imIn->image[y], imIn->linesize);
  36. }
  37. }
  38. ImagingSectionLeave(&cookie);
  39. return imOut;
  40. }
  41. Imaging
  42. ImagingCopy(Imaging imIn) {
  43. return _copy(NULL, imIn);
  44. }
  45. Imaging
  46. ImagingCopy2(Imaging imOut, Imaging imIn) {
  47. return _copy(imOut, imIn);
  48. }