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>