如何在android中的Bitmap图像中应用照片效果

时间:2012-04-16 07:25:13

标签: android android-gallery android-mediaplayer android-gui android-photos

请帮我对位图图像数据执行图像效果。

我搜索以下代码以应用照片效果。但我不知道应该通过什么值才能产生效果。

代码是..

 public Bitmap createEffect(Bitmap src, int depth, double red, double green, double blue) {
    // image size
    int width = src.getWidth();
    int height = src.getHeight();
    // create output bitmap
    Bitmap bmOut = Bitmap.createBitmap(width, height, src.getConfig());
    // constant grayscale
    final double GS_RED = 0.3;
    final double GS_GREEN = 0.59;
    final double GS_BLUE = 0.11;
    // color information
    int A, R, G, B;
    int pixel;

    // scan through all pixels
    for(int x = 0; x < width; ++x) {
        for(int y = 0; y < height; ++y) {
            // get pixel color
            pixel = src.getPixel(x, y);
            // get color on each channel
            A = Color.alpha(pixel);
            R = Color.red(pixel);
            G = Color.green(pixel);
            B = Color.blue(pixel);
            // apply grayscale sample
            B = G = R = (int)(GS_RED * R + GS_GREEN * G + GS_BLUE * B);

            // apply intensity level for sepid-toning on each channel
            R += (depth * red);
            if(R > 255) { R = 255; }

            G += (depth * green);
            if(G > 255) { G = 255; }

            B += (depth * blue);
            if(B > 255) { B = 255; }

            // set new pixel color to output image
            bmOut.setPixel(x, y, Color.argb(A, R, G, B));
        }
    }

    // return final image
    return bmOut;
}

我想像this应用程序一样工作。

以下图片有效

First effect second effect Third effect fourth effect sixth effect

2 个答案:

答案 0 :(得分:2)

如果您阅读代码,您可以看到src中的每个像素首先转换为灰度[0-255] 通过使用灰度值作为基础并添加深度*颜色,将该值转换回颜色像素。

因此,如果你想给位图一个绿色色调,就像这样:

Bitmap result = createEffect(src,50,0,1,0);

这将使位图更环保。

要反转颜色(就像在上一个例子中一样)使用此(未经测试的)函数:

public Bitmap invert(Bitmap src) {
    // image size
    int width = src.getWidth();
    int height = src.getHeight();
    // create output bitmap
    Bitmap bmOut = Bitmap.createBitmap(width, height, src.getConfig());
    // color information
    int A, R, G, B;
    int pixel;

    // scan through all pixels
    for(int x = 0; x < width; ++x) {
        for(int y = 0; y < height; ++y) {
            // get pixel color
            pixel = src.getPixel(x, y);
            // get color on each channel
            A = Color.alpha(pixel);
            R = Color.red(pixel);
            G = Color.green(pixel);
            B = Color.blue(pixel);
            // set new pixel color to output image
            bmOut.setPixel(x, y, Color.argb(A, 255-R, 255-G, 255-B));
        }
    }

    // return final image
    return bmOut;
}

答案 1 :(得分:2)

访问此链接:

http://www.shaikhhamadali.blogspot.ro/p/home.html

这里以编程方式和评论描述了20到30个图像效果!

希望这对你有所帮助。