Pillow

Форк
0
/
Offset.c 
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

19
Imaging
20
ImagingOffset(Imaging im, int xoffset, int yoffset) {
21
    int x, y;
22
    Imaging imOut;
23

24
    if (!im) {
25
        return (Imaging)ImagingError_ModeError();
26
    }
27

28
    imOut = ImagingNewDirty(im->mode, im->xsize, im->ysize);
29
    if (!imOut) {
30
        return NULL;
31
    }
32

33
    ImagingCopyPalette(imOut, im);
34

35
    /* make offsets positive to avoid negative coordinates */
36
    xoffset %= im->xsize;
37
    xoffset = im->xsize - xoffset;
38
    if (xoffset < 0) {
39
        xoffset += im->xsize;
40
    }
41

42
    yoffset %= im->ysize;
43
    yoffset = im->ysize - yoffset;
44
    if (yoffset < 0) {
45
        yoffset += im->ysize;
46
    }
47

48
#define OFFSET(image)                               \
49
    for (y = 0; y < im->ysize; y++) {               \
50
        for (x = 0; x < im->xsize; x++) {           \
51
            int yi = (y + yoffset) % im->ysize;     \
52
            int xi = (x + xoffset) % im->xsize;     \
53
            imOut->image[y][x] = im->image[yi][xi]; \
54
        }                                           \
55
    }
56

57
    if (im->image8) {
58
        OFFSET(image8)
59
    } else {
60
        OFFSET(image32)
61
    }
62

63
    return imOut;
64
}
65

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.