diff options
Diffstat (limited to 'Imaging/libImaging/Crop.c')
-rw-r--r-- | Imaging/libImaging/Crop.c | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/Imaging/libImaging/Crop.c b/Imaging/libImaging/Crop.c new file mode 100644 index 0000000..8d3fd3b --- /dev/null +++ b/Imaging/libImaging/Crop.c @@ -0,0 +1,57 @@ +/* + * The Python Imaging Library + * $Id: Crop.c 2134 2004-10-06 08:55:20Z fredrik $ + * + * cut region from image + * + * history: + * 95-11-27 fl Created + * 98-07-10 fl Fixed "null result" error + * 99-02-05 fl Rewritten to use Paste primitive + * + * Copyright (c) Secret Labs AB 1997-99. + * Copyright (c) Fredrik Lundh 1995. + * + * See the README file for information on usage and redistribution. + */ + + +#include "Imaging.h" + + +Imaging +ImagingCrop(Imaging imIn, int sx0, int sy0, int sx1, int sy1) +{ + Imaging imOut; + int xsize, ysize; + int dx0, dy0, dx1, dy1; + + if (!imIn) + return (Imaging) ImagingError_ModeError(); + + xsize = sx1 - sx0; + if (xsize < 0) + xsize = 0; + ysize = sy1 - sy0; + if (ysize < 0) + ysize = 0; + + imOut = ImagingNew(imIn->mode, xsize, ysize); + if (!imOut) + return NULL; + + ImagingCopyInfo(imOut, imIn); + + dx0 = -sx0; + dy0 = -sy0; + dx1 = imIn->xsize - sx0; + dy1 = imIn->ysize - sy0; + + /* paste the source image on top of the output image!!! */ + if (ImagingPaste(imOut, imIn, NULL, dx0, dy0, dx1, dy1) < 0) { + ImagingDelete(imOut); + return NULL; + } + + return imOut; +} |