【问题标题】:Java - Colouring imageJava - 着色图像
【发布时间】:2011-12-18 08:47:10
【问题描述】:

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

感谢您的帮助。

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

【问题讨论】:

  • 你的意思是你想让图像的背景改变颜色吗?如果是这种情况,您必须查看透明度。
  • 不。我希望灰色图像像这样改变颜色dl.dropbox.com/u/17664230/ruka.png
  • 您是否在任何地方使用 ImageFilter?这就是过去对我有用的东西。事实上,您目前尝试使用的是什么代码?
  • 我正在使用此代码检索 int color pastebin.com/YRYmLrBz

标签: java image colors bufferedimage multiplication


【解决方案1】:

您是否尝试将图像灰度通道 (white-black) 更改为 (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

【讨论】:

  • 不,我只是想用给定的颜色精灵着色,就像精灵表上的这些之一:bit.ly/vcHsdl
  • 我试过了,但它不起作用。它改变颜色但不正确。我更喜欢像 getRGB 和 setRGB 这样的 BufferedImage 方法。我只需要知道如何处理颜色,合并?乘?添加它们?
  • getRGB 返回一个整数值,表示 4 个通道 [alpha,reg,green,blue]。所有通道都是 0-255 范围内的值。 (您的输入图像是灰度的,这意味着红色、绿色和蓝色通道在 0-255 范围内的值相同)。要获得彩色结果,您需要将每个通道分别与给定颜色的相同通道相乘并除以 255。输入图像通道将用作您使用的颜色通道的强度级别。保持 Alpha 通道不变。
【解决方案2】:

我会定义一些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)。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-22
    • 2016-07-04
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 2015-07-02
    • 2011-11-23
    • 2012-09-25
    相关资源
    最近更新 更多