Annotation of embedaddon/php/ext/gd/libgd/gd_pixelate.c, revision 1.1.1.1
1.1 misho 1: #include "gd.h"
2:
3: int gdImagePixelate(gdImagePtr im, int block_size, const unsigned int mode)
4: {
5: int x, y;
6:
7: if (block_size <= 0) {
8: return 0;
9: } else if (block_size == 1) {
10: return 1;
11: }
12: switch (mode) {
13: case GD_PIXELATE_UPPERLEFT:
14: for (y = 0; y < im->sy; y += block_size) {
15: for (x = 0; x < im->sx; x += block_size) {
16: if (gdImageBoundsSafe(im, x, y)) {
17: int c = gdImageGetPixel(im, x, y);
18: gdImageFilledRectangle(im, x, y, x + block_size - 1, y + block_size - 1, c);
19: }
20: }
21: }
22: break;
23: case GD_PIXELATE_AVERAGE:
24: for (y = 0; y < im->sy; y += block_size) {
25: for (x = 0; x < im->sx; x += block_size) {
26: int a, r, g, b, c;
27: int total;
28: int cx, cy;
29:
30: a = r = g = b = c = total = 0;
31: /* sampling */
32: for (cy = 0; cy < block_size; cy++) {
33: for (cx = 0; cx < block_size; cx++) {
34: if (!gdImageBoundsSafe(im, x + cx, y + cy)) {
35: continue;
36: }
37: c = gdImageGetPixel(im, x + cx, y + cy);
38: a += gdImageAlpha(im, c);
39: r += gdImageRed(im, c);
40: g += gdImageGreen(im, c);
41: b += gdImageBlue(im, c);
42: total++;
43: }
44: }
45: /* drawing */
46: if (total > 0) {
47: c = gdImageColorResolveAlpha(im, r / total, g / total, b / total, a / total);
48: gdImageFilledRectangle(im, x, y, x + block_size - 1, y + block_size - 1, c);
49: }
50: }
51: }
52: break;
53: default:
54: return 0;
55: }
56: return 1;
57: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>