1

我已经看到了很多在 android 中调整位图亮度的链接和帖子,但我想用渐变调整亮度,比如只调整位图中心的亮度。有人知道怎么做吗?

4

1 回答 1

0

您可以生成位图并绘制渐变:

如何在 Android 的画布上绘制平滑/抖动渐变

然后使用渐变位图中的每个像素并获取亮度并将其传递给调整亮度的函数。

看这里确定 RGB 颜色亮度的公式

public Bitmap SetBrightness(Bitmap src, Bitmap gradient) {
    // original 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);
            A = Color.alpha(pixel);
            R = Color.red(pixel);
            G = Color.green(pixel);
            B = Color.blue(pixel);

            int gradientPixel = gradient.getPixel(x, y);
            int value = getLuminance(gradientPixel);                

            // increase/decrease each channel
            R += value;
            if (R > 255) {
                R = 255;
            }
            else if (R < 0) {
                R = 0;
            }

            G += value;
            if (G > 255) {
                G = 255;
            }
            else if (G < 0) {
                G = 0;
            }

            B += value;
            if (B > 255) {
                B = 255;
            }
            else if (B < 0) {
                B = 0;
            }

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

    // return final image
    return bmOut;
}

public int getLuminance(int pixel) {
    int A, R, G, B;
    A = Color.alpha(pixel);
    R = Color.red(pixel);
    G = Color.green(pixel);
    B = Color.blue(pixel);

    return (0.2126 * R) + (0.7152 * G) + (0.0722 * B);
}
于 2013-10-29T10:59:42.543 回答