繁体   English   中英

Java-着色图像

[英]Java - Colouring image

我试图用给定的颜色创建彩色的灰色图像,但是我总是失败。 我知道我必须使用BufferedImage并将源图像的所有像素加载到数组中,但是我不知道如何使用颜色值,因此在将源颜色和给定颜色相乘后,总会有一些奇怪的颜色(对于记录我我已经获得了获取颜色int的代码)。

谢谢你的帮助。

例如http://dl.dropbox.com/u/17664230/ruka.png

您是否要将图像灰色通道(白黑)更改为(some_color-black)?

public void recolor(BufferedImage source, BufferedImage destination, int color) {
    WritableRaster destinationRaster = destination.getRaster();
    Raster sourceRaster = source.getRaster();
    //red, green, blue
    int channels = new int[]{color & 0xFF0000, color & 0xFF00, color & 0xFF};

    for (int channel=0; channel<3; channel++){
        for (int y=0; y<sourceRaster.getHeight(); y++) {
            for (int x=0; x<rangeSlicer.getWidth(); x++) {
                pixel = sourceRaster.getSample(x, y, channel);
                pixel = Math.round((double)pixel/255.0 * channels[channel]);
                destinationRaster.setSample(x, y, channel, pixel);
            }
        }
    }
}

不确定是否可以编译,但是想法就是这样。 要获得更有效的程序,请检查RescaleOp

我将定义一些alpha = 0.2并执行以下操作:

given gray #777777
make redder with: 
                  new red = 77 * (1.0 + alpha)
                  new green = blue = 77 * (1.0 - alpha)

实际上,您必须要小心并确保截断(1 + alpha)和(1-alpha),以便仅使用0到1.0之间的值。 使用Math.min(0.0,1.0-alpha)代替(1.0-alpha)和Math.max(1.0,1.0 + alpha)代替(1.0 + alpha)。

使用此公式,如果给您黑色(#000000),它将保持黑色。 如果给您白色(#FFFFFF),则最终变成粉红色(#FFCCCC)。 如果将alpha设置为1.0,则白色最终将变为纯红色(#FF0000)。

您可能会想出不同的颜色缩放公式,但是我想您应该确保变换始终将黑色保持为纯黑色。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM