Annotation of embedaddon/php/ext/gd/libgd/gd_pixelate.c, revision 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>