Search in sources :

Example 31 with Pixel

use of org.jwildfire.image.Pixel in project JWildfire by thargor6.

the class MotionBlurTransformer method performPixelTransformation.

@Override
protected void performPixelTransformation(WFImage pImg) {
    SimpleImage bgImg = (SimpleImage) pImg;
    SimpleImage fgImg = srcImg;
    int bgWidth = bgImg.getImageWidth();
    int bgHeight = bgImg.getImageHeight();
    int x1 = 0, y1 = 0;
    int x2 = this.deltaX;
    int y2 = this.deltaY;
    if ((x2 == 0) && (y2 == 0))
        return;
    int n;
    if (x2 > 0)
        n = x2;
    else
        n = 0 - x2;
    if (y2 > 0)
        n += y2;
    else
        n += 0 - y2;
    n++;
    n *= 2;
    int[] x = new int[n];
    int[] y = new int[n];
    n = Tools.bresenham(x1, y1, x2, y2, x, y);
    int mix = 25;
    int m1 = 100 - mix;
    int m2 = mix;
    for (int k = 1; k < n; k++) {
        int left = x[k];
        int top = y[k];
        /* case 1 */
        int bgLeft = 0, bgTop = 0, fgLeft = 0, fgTop = 0;
        int hSize = 0, vSize = 0;
        if ((left >= 0) && (top >= 0)) {
            if ((left >= bgWidth) || (top >= bgHeight))
                return;
            hSize = bgWidth - left;
            if (hSize > bgWidth)
                hSize = bgWidth;
            vSize = bgHeight - top;
            if (vSize > bgHeight)
                vSize = bgHeight;
            bgLeft = left;
            bgTop = top;
            fgLeft = 0;
            fgTop = 0;
        } else /* case 2 */
        if ((left < 0) && (top >= 0)) {
            if ((left <= (0 - bgWidth)) || (top >= bgHeight))
                return;
            hSize = bgWidth + left;
            if (hSize > bgWidth)
                hSize = bgWidth;
            vSize = bgHeight - top;
            if (vSize > bgHeight)
                vSize = bgHeight;
            bgLeft = 0;
            bgTop = top;
            fgLeft = 0 - left;
            fgTop = 0;
        } else /* case 3 */
        if ((left >= 0) && (top < 0)) {
            if ((left >= bgWidth) || (top <= (0 - bgHeight)))
                return;
            hSize = bgWidth - left;
            if (hSize > bgWidth)
                hSize = bgWidth;
            vSize = bgHeight + top;
            if (vSize > bgHeight)
                vSize = bgHeight;
            bgLeft = left;
            bgTop = 0;
            fgLeft = 0;
            fgTop = 0 - top;
        } else /* case 4 */
        if ((left < 0) && (top < 0)) {
            if ((left <= (0 - bgWidth)) || (top <= (0 - bgHeight)))
                return;
            hSize = bgWidth + left;
            if (hSize > bgWidth)
                hSize = bgWidth;
            vSize = bgHeight + top;
            if (vSize > bgHeight)
                vSize = bgHeight;
            bgLeft = 0;
            bgTop = 0;
            fgTop = 0 - top;
            fgLeft = 0 - left;
        }
        Pixel bgPixel = new Pixel();
        Pixel fgPixel = new Pixel();
        for (int i = 0; i < vSize; i++) {
            for (int j = 0; j < hSize; j++) {
                bgPixel.setARGBValue(bgImg.getARGBValue(j + bgLeft, i + bgTop));
                fgPixel.setARGBValue(fgImg.getARGBValue(j + fgLeft, i + fgTop));
                bgPixel.r = ((int) (bgPixel.r * m1) + (int) (fgPixel.r) * m2) / (int) 100;
                bgPixel.g = ((int) (bgPixel.g * m1) + (int) (fgPixel.g) * m2) / (int) 100;
                bgPixel.b = ((int) (bgPixel.b * m1) + (int) (fgPixel.b) * m2) / (int) 100;
                bgImg.setRGB(j + bgLeft, i + bgTop, bgPixel);
            }
        }
    }
}
Also used : SimpleImage(org.jwildfire.image.SimpleImage) Pixel(org.jwildfire.image.Pixel)

Example 32 with Pixel

use of org.jwildfire.image.Pixel in project JWildfire by thargor6.

the class BalancingGradientTransformer method performPixelTransformation.

@Override
protected void performPixelTransformation(WFImage pImg) {
    SimpleImage img = (SimpleImage) pImg;
    int width = pImg.getImageWidth();
    int height = pImg.getImageHeight();
    int x1 = this.x1;
    int y1 = this.y1;
    int v1 = this.value1;
    int x2 = this.x2;
    int y2 = this.y2;
    int v2 = this.value2;
    double rx = (double) (x2 - x1);
    double ry = (double) (y2 - y1);
    double dv = (double) (v2 - v1);
    double vlen;
    if (this.transition == Transition.PARALLEL)
        vlen = Math.sqrt(rx * rx + ry * ry);
    else
        vlen = this.radius - this.baseRadius;
    if (vlen < 0.0001)
        vlen = 0.0001;
    double vlenq = vlen * vlen;
    Pixel pixel = new Pixel();
    final double brMAX = 256.0;
    switch(this.mode) {
        case RED:
            if (this.transition == Transition.PARALLEL) {
                for (int i = 0; i < height; i++) {
                    double ay = (double) (i - y1);
                    for (int j = 0; j < width; j++) {
                        double ax = (double) (j - x1);
                        double prj = (ax * rx + ay * ry) / vlenq;
                        if (prj < 0.0)
                            prj = 0.0;
                        else if (prj > 1.0)
                            prj = 1.0;
                        int ival = v1 + (int) (dv * prj + 0.5);
                        int tt = (int) ((double) ival / (double) brMAX * (double) 255.0 + 0.5);
                        pixel.setARGBValue(img.getARGBValue(j, i));
                        pixel.r += tt;
                        if (pixel.r < 0)
                            pixel.r = 0;
                        else if (pixel.r > 255)
                            pixel.r = 255;
                        img.setRGB(j, i, pixel);
                    }
                }
            } else {
                for (int i = 0; i < height; i++) {
                    double ay = (double) (i - y1);
                    for (int j = 0; j < width; j++) {
                        double ax = (double) (j - x1);
                        double prj = (Math.sqrt(ax * ax + ay * ay) - baseRadius) / vlen;
                        if (prj < 0.0)
                            prj = 0.0;
                        else if (prj > 1.0)
                            prj = 1.0;
                        int ival = v1 + (int) (dv * prj + 0.5);
                        int tt = (int) ((double) ival / (double) brMAX * (double) 255.0 + 0.5);
                        pixel.setARGBValue(img.getARGBValue(j, i));
                        pixel.r += tt;
                        if (pixel.r < 0)
                            pixel.r = 0;
                        else if (pixel.r > 255)
                            pixel.r = 255;
                        img.setRGB(j, i, pixel);
                    }
                }
            }
            break;
        case GREEN:
            if (this.transition == Transition.PARALLEL) {
                for (int i = 0; i < height; i++) {
                    double ay = (double) (i - y1);
                    for (int j = 0; j < width; j++) {
                        double ax = (double) (j - x1);
                        double prj = (ax * rx + ay * ry) / vlenq;
                        if (prj < 0.0)
                            prj = 0.0;
                        else if (prj > 1.0)
                            prj = 1.0;
                        int ival = v1 + (int) (dv * prj + 0.5);
                        int tt = (int) ((double) ival / (double) brMAX * (double) 255.0 + 0.5);
                        pixel.setARGBValue(img.getARGBValue(j, i));
                        pixel.g += tt;
                        if (pixel.g < 0)
                            pixel.g = 0;
                        else if (pixel.g > 255)
                            pixel.g = 255;
                        img.setRGB(j, i, pixel);
                    }
                }
            } else {
                for (int i = 0; i < height; i++) {
                    double ay = (double) (i - y1);
                    for (int j = 0; j < width; j++) {
                        double ax = (double) (j - x1);
                        double prj = (Math.sqrt(ax * ax + ay * ay) - baseRadius) / vlen;
                        if (prj < 0.0)
                            prj = 0.0;
                        else if (prj > 1.0)
                            prj = 1.0;
                        int ival = v1 + (int) (dv * prj + 0.5);
                        int tt = (int) ((double) ival / (double) brMAX * (double) 255.0 + 0.5);
                        pixel.setARGBValue(img.getARGBValue(j, i));
                        pixel.g += tt;
                        if (pixel.g < 0)
                            pixel.g = 0;
                        else if (pixel.g > 255)
                            pixel.g = 255;
                        img.setRGB(j, i, pixel);
                    }
                }
            }
            break;
        case BLUE:
            if (this.transition == Transition.PARALLEL) {
                for (int i = 0; i < height; i++) {
                    double ay = (double) (i - y1);
                    for (int j = 0; j < width; j++) {
                        double ax = (double) (j - x1);
                        double prj = (ax * rx + ay * ry) / vlenq;
                        if (prj < 0.0)
                            prj = 0.0;
                        else if (prj > 1.0)
                            prj = 1.0;
                        int ival = v1 + (int) (dv * prj + 0.5);
                        int tt = (int) ((double) ival / (double) brMAX * (double) 255.0 + 0.5);
                        pixel.setARGBValue(img.getARGBValue(j, i));
                        pixel.b += tt;
                        if (pixel.b < 0)
                            pixel.b = 0;
                        else if (pixel.b > 255)
                            pixel.b = 255;
                        img.setRGB(j, i, pixel);
                    }
                }
            } else {
                for (int i = 0; i < height; i++) {
                    double ay = (double) (i - y1);
                    for (int j = 0; j < width; j++) {
                        double ax = (double) (j - x1);
                        double prj = (Math.sqrt(ax * ax + ay * ay) - baseRadius) / vlen;
                        if (prj < 0.0)
                            prj = 0.0;
                        else if (prj > 1.0)
                            prj = 1.0;
                        int ival = v1 + (int) (dv * prj + 0.5);
                        int tt = (int) ((double) ival / (double) brMAX * (double) 255.0 + 0.5);
                        pixel.setARGBValue(img.getARGBValue(j, i));
                        pixel.b += tt;
                        if (pixel.b < 0)
                            pixel.b = 0;
                        else if (pixel.b > 255)
                            pixel.b = 255;
                        img.setRGB(j, i, pixel);
                    }
                }
            }
            break;
        case BRIGHTNESS:
            if (this.transition == Transition.PARALLEL) {
                for (int i = 0; i < height; i++) {
                    double ay = (double) (i - y1);
                    for (int j = 0; j < width; j++) {
                        double ax = (double) (j - x1);
                        double prj = (ax * rx + ay * ry) / vlenq;
                        if (prj < 0.0)
                            prj = 0.0;
                        else if (prj > 1.0)
                            prj = 1.0;
                        int ival = v1 + (int) (dv * prj + 0.5);
                        int tt = (int) ((double) ival / (double) brMAX * (double) 255.0 + 0.5);
                        pixel.setARGBValue(img.getARGBValue(j, i));
                        pixel.r += tt;
                        if (pixel.r < 0)
                            pixel.r = 0;
                        else if (pixel.r > 255)
                            pixel.r = 255;
                        pixel.g += tt;
                        if (pixel.g < 0)
                            pixel.g = 0;
                        else if (pixel.g > 255)
                            pixel.g = 255;
                        pixel.b += tt;
                        if (pixel.b < 0)
                            pixel.b = 0;
                        else if (pixel.b > 255)
                            pixel.b = 255;
                        img.setRGB(j, i, pixel);
                    }
                }
            } else {
                for (int i = 0; i < height; i++) {
                    double ay = (double) (i - y1);
                    for (int j = 0; j < width; j++) {
                        double ax = (double) (j - x1);
                        double prj = (Math.sqrt(ax * ax + ay * ay) - baseRadius) / vlen;
                        if (prj < 0.0)
                            prj = 0.0;
                        else if (prj > 1.0)
                            prj = 1.0;
                        int ival = v1 + (int) (dv * prj + 0.5);
                        int tt = (int) ((double) ival / (double) brMAX * (double) 255.0 + 0.5);
                        pixel.setARGBValue(img.getARGBValue(j, i));
                        pixel.r += tt;
                        if (pixel.r < 0)
                            pixel.r = 0;
                        else if (pixel.r > 255)
                            pixel.r = 255;
                        pixel.g += tt;
                        if (pixel.g < 0)
                            pixel.g = 0;
                        else if (pixel.g > 255)
                            pixel.g = 255;
                        pixel.b += tt;
                        if (pixel.b < 0)
                            pixel.b = 0;
                        else if (pixel.b > 255)
                            pixel.b = 255;
                        img.setRGB(j, i, pixel);
                    }
                }
            }
            break;
        case CONTRAST:
            if (this.transition == Transition.PARALLEL) {
                for (int i = 0; i < height; i++) {
                    double ay = (double) (i - y1);
                    for (int j = 0; j < width; j++) {
                        double ax = (double) (j - x1);
                        double prj = (ax * rx + ay * ry) / vlenq;
                        if (prj < 0.0)
                            prj = 0.0;
                        else if (prj > 1.0)
                            prj = 1.0;
                        int ival = v1 + (int) (dv * prj + 0.5);
                        double scale = (double) (ival) / brMAX;
                        int sc = (int) (scale * (double) Tools.VPREC + 0.5);
                        int dc;
                        pixel.setARGBValue(img.getARGBValue(j, i));
                        if (ival > 0) {
                            dc = (int) (((int) (pixel.r - (int) 127) * sc) >> Tools.SPREC);
                            if (dc < (-255))
                                dc = (-255);
                            else if (dc > 255)
                                dc = 255;
                            dc = pixel.r + dc;
                            if (dc < 0)
                                dc = 0;
                            else if (dc > 255)
                                dc = 255;
                            pixel.r = dc;
                            dc = (int) (((int) (pixel.g - (int) 127) * sc) >> Tools.SPREC);
                            if (dc < (-255))
                                dc = (-255);
                            else if (dc > 255)
                                dc = 255;
                            dc = pixel.g + dc;
                            if (dc < 0)
                                dc = 0;
                            else if (dc > 255)
                                dc = 255;
                            pixel.g = dc;
                            dc = (int) ((int) ((pixel.b - (int) 127) * sc) >> Tools.SPREC);
                            if (dc < (-255))
                                dc = (-255);
                            else if (dc > 255)
                                dc = 255;
                            dc = pixel.b + dc;
                            if (dc < 0)
                                dc = 0;
                            else if (dc > 255)
                                dc = 255;
                            pixel.b = dc;
                        } else {
                            int val;
                            dc = (int) (((int) (pixel.r - (int) 127) * sc) >> Tools.SPREC);
                            if (dc < (-255))
                                dc = (-255);
                            else if (dc > 255)
                                dc = 255;
                            val = pixel.r + dc;
                            if (pixel.r < 127) {
                                if (val > 127)
                                    val = 127;
                            } else {
                                if (val < 127)
                                    val = 127;
                            }
                            pixel.r = val;
                            dc = (int) ((int) ((pixel.g - (int) 127) * sc) >> Tools.SPREC);
                            if (dc < (-255))
                                dc = (-255);
                            else if (dc > 255)
                                dc = 255;
                            val = pixel.g + dc;
                            if (pixel.g < 127) {
                                if (val > 127)
                                    val = 127;
                            } else {
                                if (val < 127)
                                    val = 127;
                            }
                            pixel.g = val;
                            dc = (int) ((int) ((pixel.b - (int) 127) * sc) >> Tools.SPREC);
                            if (dc < (-255))
                                dc = (-255);
                            else if (dc > 255)
                                dc = 255;
                            val = pixel.b + dc;
                            if (pixel.b < 127) {
                                if (val > 127)
                                    val = 127;
                            } else {
                                if (val < 127)
                                    val = 127;
                            }
                            pixel.b = val;
                        }
                        img.setRGB(j, i, pixel);
                    }
                }
            } else {
                for (int i = 0; i < height; i++) {
                    double ay = (double) (i - y1);
                    for (int j = 0; j < width; j++) {
                        double ax = (double) (j - x1);
                        double prj = (Math.sqrt(ax * ax + ay * ay) - baseRadius) / vlen;
                        if (prj < 0.0)
                            prj = 0.0;
                        else if (prj > 1.0)
                            prj = 1.0;
                        int ival = v1 + (int) (dv * prj + 0.5);
                        double scale = (double) (ival) / brMAX;
                        int sc = (int) (scale * (double) Tools.VPREC + 0.5);
                        int dc;
                        pixel.setARGBValue(img.getARGBValue(j, i));
                        if (ival > 0) {
                            dc = (int) (((int) (pixel.r - (int) 127) * sc) >> Tools.SPREC);
                            if (dc < (-255))
                                dc = (-255);
                            else if (dc > 255)
                                dc = 255;
                            dc = pixel.r + dc;
                            if (dc < 0)
                                dc = 0;
                            else if (dc > 255)
                                dc = 255;
                            pixel.r = dc;
                            dc = (int) (((int) (pixel.g - (int) 127) * sc) >> Tools.SPREC);
                            if (dc < (-255))
                                dc = (-255);
                            else if (dc > 255)
                                dc = 255;
                            dc = pixel.g + dc;
                            if (dc < 0)
                                dc = 0;
                            else if (dc > 255)
                                dc = 255;
                            pixel.g = dc;
                            dc = (int) ((int) ((pixel.b - (int) 127) * sc) >> Tools.SPREC);
                            if (dc < (-255))
                                dc = (-255);
                            else if (dc > 255)
                                dc = 255;
                            dc = pixel.b + dc;
                            if (dc < 0)
                                dc = 0;
                            else if (dc > 255)
                                dc = 255;
                            pixel.b = dc;
                        } else {
                            int val;
                            dc = (int) (((int) (pixel.r - (int) 127) * sc) >> Tools.SPREC);
                            if (dc < (-255))
                                dc = (-255);
                            else if (dc > 255)
                                dc = 255;
                            val = pixel.r + dc;
                            if (pixel.r < 127) {
                                if (val > 127)
                                    val = 127;
                            } else {
                                if (val < 127)
                                    val = 127;
                            }
                            pixel.r = val;
                            dc = (int) ((int) ((pixel.g - (int) 127) * sc) >> Tools.SPREC);
                            if (dc < (-255))
                                dc = (-255);
                            else if (dc > 255)
                                dc = 255;
                            val = pixel.g + dc;
                            if (pixel.g < 127) {
                                if (val > 127)
                                    val = 127;
                            } else {
                                if (val < 127)
                                    val = 127;
                            }
                            pixel.g = val;
                            dc = (int) ((int) ((pixel.b - (int) 127) * sc) >> Tools.SPREC);
                            if (dc < (-255))
                                dc = (-255);
                            else if (dc > 255)
                                dc = 255;
                            val = pixel.b + dc;
                            if (pixel.b < 127) {
                                if (val > 127)
                                    val = 127;
                            } else {
                                if (val < 127)
                                    val = 127;
                            }
                            pixel.b = val;
                        }
                        img.setRGB(j, i, pixel);
                    }
                }
            }
            break;
        case GAMMA:
            {
                final double max = 255.0;
                if (this.transition == Transition.PARALLEL) {
                    for (int i = 0; i < height; i++) {
                        double ay = (double) (i - y1);
                        for (int j = 0; j < width; j++) {
                            double ax = (double) (j - x1);
                            double prj = (ax * rx + ay * ry) / vlenq;
                            if (prj < 0.0)
                                prj = 0.0;
                            else if (prj > 1.0)
                                prj = 1.0;
                            int ival = v1 + (int) (dv * prj + 0.5);
                            double g = (double) 512.0 / (512.0 + (double) ival);
                            pixel.setARGBValue(img.getARGBValue(j, i));
                            int val;
                            val = pixel.r;
                            if (val == 0)
                                val = 0;
                            else
                                val = (int) (max * Math.pow((double) val / 255.0, g) + 0.5);
                            pixel.r = val;
                            val = pixel.g;
                            if (val == 0)
                                val = 0;
                            else
                                val = (int) (max * Math.pow((double) val / 255.0, g) + 0.5);
                            pixel.g = val;
                            val = pixel.b;
                            if (val == 0)
                                val = 0;
                            else
                                val = (int) (max * Math.pow((double) val / 255.0, g) + 0.5);
                            pixel.b = val;
                            img.setRGB(j, i, pixel);
                        }
                    }
                } else {
                    for (int i = 0; i < height; i++) {
                        double ay = (double) (i - y1);
                        for (int j = 0; j < width; j++) {
                            double ax = (double) (j - x1);
                            double prj = (Math.sqrt(ax * ax + ay * ay) - baseRadius) / vlen;
                            if (prj < 0.0)
                                prj = 0.0;
                            else if (prj > 1.0)
                                prj = 1.0;
                            int ival = v1 + (int) (dv * prj + 0.5);
                            double g = (double) 512.0 / (512.0 + (double) ival);
                            pixel.setARGBValue(img.getARGBValue(j, i));
                            int val;
                            val = pixel.r;
                            if (val == 0)
                                val = 0;
                            else
                                val = (int) (max * Math.pow((double) val / 255.0, g) + 0.5);
                            pixel.r = val;
                            val = pixel.g;
                            if (val == 0)
                                val = 0;
                            else
                                val = (int) (max * Math.pow((double) val / 255.0, g) + 0.5);
                            pixel.g = val;
                            val = pixel.b;
                            if (val == 0)
                                val = 0;
                            else
                                val = (int) (max * Math.pow((double) val / 255.0, g) + 0.5);
                            pixel.b = val;
                            img.setRGB(j, i, pixel);
                        }
                    }
                }
            }
            break;
        case SATURATION:
            {
                int rs = 2990;
                int gs = 5880;
                int bs = 1130;
                rs = (rs * Tools.VPREC) / 10000;
                gs = (gs * Tools.VPREC) / 10000;
                bs = (bs * Tools.VPREC) / 10000;
                if (this.transition == Transition.PARALLEL) {
                    for (int i = 0; i < height; i++) {
                        double ay = (double) (i - y1);
                        for (int j = 0; j < width; j++) {
                            double ax = (double) (j - x1);
                            double prj = (ax * rx + ay * ry) / vlenq;
                            if (prj < 0.0)
                                prj = 0.0;
                            else if (prj > 1.0)
                                prj = 1.0;
                            int ival = v1 + (int) (dv * prj + 0.5);
                            int scl = (int) ((double) ival / 255.0 * 1024.0 + 0.5);
                            pixel.setARGBValue(img.getARGBValue(j, i));
                            int rv = pixel.r;
                            int gv = pixel.g;
                            int bv = pixel.b;
                            int avg = (rs * rv + gs * gv + bs * bv) >> Tools.SPREC;
                            rv += ((rv - avg) * scl) >> Tools.SPREC;
                            if (rv < 0)
                                rv = 0;
                            else if (rv > 255)
                                rv = 255;
                            pixel.r = rv;
                            gv += ((gv - avg) * scl) >> Tools.SPREC;
                            if (gv < 0)
                                gv = 0;
                            else if (gv > 255)
                                gv = 255;
                            pixel.g = gv;
                            bv += ((bv - avg) * scl) >> Tools.SPREC;
                            if (bv < 0)
                                bv = 0;
                            else if (bv > 255)
                                bv = 255;
                            pixel.b = bv;
                            img.setRGB(j, i, pixel);
                        }
                    }
                } else {
                    for (int i = 0; i < height; i++) {
                        double ay = (double) (i - y1);
                        for (int j = 0; j < width; j++) {
                            double ax = (double) (j - x1);
                            double prj = (Math.sqrt(ax * ax + ay * ay) - baseRadius) / vlen;
                            if (prj < 0.0)
                                prj = 0.0;
                            else if (prj > 1.0)
                                prj = 1.0;
                            int ival = v1 + (int) (dv * prj + 0.5);
                            int scl = (int) ((double) ival / 255.0 * 1024.0 + 0.5);
                            pixel.setARGBValue(img.getARGBValue(j, i));
                            int rv = pixel.r;
                            int gv = pixel.g;
                            int bv = pixel.b;
                            int avg = (rs * rv + gs * gv + bs * bv) >> Tools.SPREC;
                            rv += ((rv - avg) * scl) >> Tools.SPREC;
                            if (rv < 0)
                                rv = 0;
                            else if (rv > 255)
                                rv = 255;
                            pixel.r = rv;
                            gv += ((gv - avg) * scl) >> Tools.SPREC;
                            if (gv < 0)
                                gv = 0;
                            else if (gv > 255)
                                gv = 255;
                            pixel.g = gv;
                            bv += ((bv - avg) * scl) >> Tools.SPREC;
                            if (bv < 0)
                                bv = 0;
                            else if (bv > 255)
                                bv = 255;
                            pixel.b = bv;
                            img.setRGB(j, i, pixel);
                        }
                    }
                }
            }
            break;
    }
}
Also used : SimpleImage(org.jwildfire.image.SimpleImage) Pixel(org.jwildfire.image.Pixel)

Example 33 with Pixel

use of org.jwildfire.image.Pixel in project JWildfire by thargor6.

the class BlackholeTransformer method performPixelTransformation.

@Override
protected void performPixelTransformation(WFImage pImg) {
    SimpleImage img = (SimpleImage) pImg;
    double cx = centreX - 0.5;
    double cy = centreY - 0.5;
    double rZoom = 1.0 / zoom;
    int width = pImg.getImageWidth();
    int height = pImg.getImageHeight();
    double w1 = (double) width - 1.0;
    double h1 = (double) height - 1.0;
    Pixel pPixel = new Pixel();
    for (int pY = 0; pY < height; pY++) {
        for (int pX = 0; pX < width; pX++) {
            /* transform the point */
            double x0 = pX - cx;
            double y0 = pY - cy;
            double rr = Math.sqrt(x0 * x0 + y0 * y0);
            x0 *= rZoom;
            y0 *= rZoom;
            double scl;
            if (rr != 0.0)
                scl = (rr + amount) / rr;
            else
                scl = 0.0;
            double x = x0 * scl + cx;
            double y = y0 * scl + cy;
            /* render it */
            double xi = Tools.fmod33(x);
            double yi = Tools.fmod33(y);
            if ((x < 0.0) || (x > w1) || (y < 0.0) || (y > h1)) {
                pPixel.r = pPixel.g = pPixel.b = 0;
            } else {
                readSrcPixels(x, y);
                pPixel.r = roundColor(((1.0 - yi) * ((1.0 - xi) * (srcP.r) + xi * (srcQ.r)) + yi * ((1.0 - xi) * (srcR.r) + xi * (srcS.r))));
                pPixel.g = roundColor(((1.0 - yi) * ((1.0 - xi) * (srcP.g) + xi * (srcQ.g)) + yi * ((1.0 - xi) * (srcR.g) + xi * (srcS.g))));
                pPixel.b = roundColor(((1.0 - yi) * ((1.0 - xi) * (srcP.b) + xi * (srcQ.b)) + yi * ((1.0 - xi) * (srcR.b) + xi * (srcS.b))));
            }
            img.setRGB(pX, pY, pPixel.r, pPixel.g, pPixel.b);
        }
    }
}
Also used : SimpleImage(org.jwildfire.image.SimpleImage) Pixel(org.jwildfire.image.Pixel)

Example 34 with Pixel

use of org.jwildfire.image.Pixel in project JWildfire by thargor6.

the class WaveTransformer method waveX_damp.

private void waveX_damp(SimpleImage pImg) {
    double damping = this.damping;
    double cx = this.centreX - 0.5;
    double cy = this.centreY - 0.5;
    double zoom = 1.0 / this.zoom;
    int width = pImg.getImageWidth();
    int height = pImg.getImageHeight();
    double PI2 = 2.0 * Math.PI;
    double shift = this.shift;
    double wavelength = this.wavelength * this.zoom;
    double amplitude = 0.0 - this.amplitude * this.zoom;
    double phase = this.phase;
    double amp = amplitude;
    double t = this.frames != 0 ? (double) this.frame / (double) this.frames : 0.0;
    shift = 2.0 * shift / (double) (height - 1);
    double w1 = (double) width - 1.0;
    double h1 = (double) height - 1.0;
    Pixel pPixel = new Pixel();
    for (int pY = 0; pY < height; pY++) {
        for (int pX = 0; pX < width; pX++) {
            pPixel.setARGBValue(pImg.getARGBValue(pX, pY));
            /* transform the point */
            double x0 = (double) pX - cx;
            double y0 = (double) pY - cy;
            double sangle = shift * pY;
            double dl = (x0 - sangle) / wavelength;
            double dl2 = dl - sangle;
            if (dl2 < 0)
                dl2 = 0.0 - dl2;
            amp = amplitude * Math.exp(dl2 * damping);
            double zz = amp * Math.sin((PI2 * (t - dl)) + phase);
            y0 += zz;
            double x = x0 * zoom + cx;
            double y = y0 * zoom + cy;
            /* color-wrapping */
            if (this.wrap) {
                while (x >= ((double) width - 0.5)) x -= (double) (width - 1);
                while ((int) x < 0.5) x += (double) (width - 1);
                while (y >= ((double) height - 0.5)) y -= (double) (height - 1);
                while ((int) y < 0.5) y += (double) (height - 1);
            }
            /* render it */
            double xi = Tools.fmod33(x);
            double yi = Tools.fmod33(y);
            if ((x < 0.0) || (x > w1) || (y < 0.0) || (y > h1)) {
                pPixel.r = pPixel.g = pPixel.b = 0;
            } else {
                readSrcPixels(x, y);
                pPixel.r = roundColor(((1.0 - yi) * ((1.0 - xi) * (srcP.r) + xi * (srcQ.r)) + yi * ((1.0 - xi) * (srcR.r) + xi * (srcS.r))));
                pPixel.g = roundColor(((1.0 - yi) * ((1.0 - xi) * (srcP.g) + xi * (srcQ.g)) + yi * ((1.0 - xi) * (srcR.g) + xi * (srcS.g))));
                pPixel.b = roundColor(((1.0 - yi) * ((1.0 - xi) * (srcP.b) + xi * (srcQ.b)) + yi * ((1.0 - xi) * (srcR.b) + xi * (srcS.b))));
            }
            pImg.setRGB(pX, pY, pPixel.r, pPixel.g, pPixel.b);
        }
    }
}
Also used : Pixel(org.jwildfire.image.Pixel)

Example 35 with Pixel

use of org.jwildfire.image.Pixel in project JWildfire by thargor6.

the class WaveTransformer method waveY.

private void waveY(SimpleImage pImg) {
    double cx = this.centreX - 0.5;
    double cy = this.centreY - 0.5;
    double zoom = 1.0 / this.zoom;
    int width = pImg.getImageWidth();
    int height = pImg.getImageHeight();
    double PI2 = 2.0 * Math.PI;
    double shift = this.shift;
    double wavelength = this.wavelength * this.zoom;
    double amplitude = 0.0 - this.amplitude * this.zoom;
    double phase = this.phase;
    shift = 2.0 * shift / (double) (width - 1);
    double amp = amplitude;
    double t = this.frames != 0 ? (double) this.frame / (double) this.frames : 0.0;
    double w1 = (double) width - 1.0;
    double h1 = (double) height - 1.0;
    Pixel pPixel = new Pixel();
    for (int pY = 0; pY < height; pY++) {
        for (int pX = 0; pX < width; pX++) {
            pPixel.setARGBValue(pImg.getARGBValue(pX, pY));
            /* transform the point */
            double x0 = (double) pX - cx;
            double y0 = (double) pY - cy;
            double dl = (y0 - shift * pX) / wavelength;
            double zz = amp * Math.sin((PI2 * (t - dl)) + phase);
            x0 += zz;
            double x = x0 * zoom + cx;
            double y = y0 * zoom + cy;
            /* color-wrapping */
            if (this.wrap) {
                while (x >= ((double) width - 0.5)) x -= (double) (width - 1);
                while ((int) x < 0.5) x += (double) (width - 1);
                while (y >= ((double) height - 0.5)) y -= (double) (height - 1);
                while ((int) y < 0.5) y += (double) (height - 1);
            }
            /* render it */
            double xi = Tools.fmod33(x);
            double yi = Tools.fmod33(y);
            if ((x < 0.0) || (x > w1) || (y < 0.0) || (y > h1)) {
                pPixel.r = pPixel.g = pPixel.b = 0;
            } else {
                readSrcPixels(x, y);
                pPixel.r = roundColor(((1.0 - yi) * ((1.0 - xi) * (srcP.r) + xi * (srcQ.r)) + yi * ((1.0 - xi) * (srcR.r) + xi * (srcS.r))));
                pPixel.g = roundColor(((1.0 - yi) * ((1.0 - xi) * (srcP.g) + xi * (srcQ.g)) + yi * ((1.0 - xi) * (srcR.g) + xi * (srcS.g))));
                pPixel.b = roundColor(((1.0 - yi) * ((1.0 - xi) * (srcP.b) + xi * (srcQ.b)) + yi * ((1.0 - xi) * (srcR.b) + xi * (srcS.b))));
            }
            pImg.setRGB(pX, pY, pPixel.r, pPixel.g, pPixel.b);
        }
    }
}
Also used : Pixel(org.jwildfire.image.Pixel)

Aggregations

Pixel (org.jwildfire.image.Pixel)62 SimpleImage (org.jwildfire.image.SimpleImage)37 RGBColor (org.jwildfire.create.tina.palette.RGBColor)5 ArrayList (java.util.ArrayList)4 HashMap (java.util.HashMap)3 HSLPixel (org.jwildfire.transform.HSLTransformer.HSLPixel)3 Color (java.awt.Color)2 Graphics2D (java.awt.Graphics2D)2 BufferedImage (java.awt.image.BufferedImage)2 JEPWrapper (org.jwildfire.base.mathparser.JEPWrapper)2 HSLTransformer (org.jwildfire.transform.HSLTransformer)2 Node (org.nfunk.jep.Node)2 SVGDiagram (com.kitfox.svg.SVGDiagram)1 SVGUniverse (com.kitfox.svg.SVGUniverse)1 Graphics (java.awt.Graphics)1 File (java.io.File)1 FileOutputStream (java.io.FileOutputStream)1 OutputStreamWriter (java.io.OutputStreamWriter)1 StringReader (java.io.StringReader)1 Writer (java.io.Writer)1