Pillow
64 строки · 1.4 Кб
1/*
2* The Python Imaging Library
3* $Id$
4*
5* offset an image in x and y directions
6*
7* history:
8* 96-07-22 fl: Created
9* 98-11-01 cgw@pgt.com: Fixed negative-array index bug
10*
11* Copyright (c) Fredrik Lundh 1996.
12* Copyright (c) Secret Labs AB 1997.
13*
14* See the README file for information on usage and redistribution.
15*/
16
17#include "Imaging.h"
18
19Imaging
20ImagingOffset(Imaging im, int xoffset, int yoffset) {
21int x, y;
22Imaging imOut;
23
24if (!im) {
25return (Imaging)ImagingError_ModeError();
26}
27
28imOut = ImagingNewDirty(im->mode, im->xsize, im->ysize);
29if (!imOut) {
30return NULL;
31}
32
33ImagingCopyPalette(imOut, im);
34
35/* make offsets positive to avoid negative coordinates */
36xoffset %= im->xsize;
37xoffset = im->xsize - xoffset;
38if (xoffset < 0) {
39xoffset += im->xsize;
40}
41
42yoffset %= im->ysize;
43yoffset = im->ysize - yoffset;
44if (yoffset < 0) {
45yoffset += im->ysize;
46}
47
48#define OFFSET(image) \
49for (y = 0; y < im->ysize; y++) { \
50for (x = 0; x < im->xsize; x++) { \
51int yi = (y + yoffset) % im->ysize; \
52int xi = (x + xoffset) % im->xsize; \
53imOut->image[y][x] = im->image[yi][xi]; \
54} \
55}
56
57if (im->image8) {
58OFFSET(image8)
59} else {
60OFFSET(image32)
61}
62
63return imOut;
64}
65