Java更改图像颜色

问题描述:

import java.awt.*; 
import java.awt.image.*; 

public class Transparency { 
    public static Image makeColorTransparent(Image im, final Color color) { 
ImageFilter filter = new RGBImageFilter() { 
    public int markerRGB = color.getRGB() | 0xFF000000; 

    public final int filterRGB(int x, int y, int rgb) { 
    if ((rgb | 0xFF000000) == markerRGB) { 
     return 0x00FFFFFF & rgb; 
     } 
    else { 
     return rgb; 
     } 
    } 
    }; 

ImageProducer ip = new FilteredImageSource(im.getSource(), filter); 
return Toolkit.getDefaultToolkit().createImage(ip); 
} 
} 

GifModifiedWithTransparentBackground = 
    Transparency.makeColorTransparent 
    (GifOriginalWithWithBlueBackground, new Color(0).blue); 
    } 

我发现此示例将背景更改为透明,但我找不到实际设置为透明的位置。我不想让它变得透明,我想将它改变成另一种颜色,但我不能,因为我不知道它在哪里设置为透明。有人可以告诉我它在哪里设置为透明吗?Java更改图像颜色

+0

'return 0x00FFFFFF & rgb;'。这是相同的颜色,alpha设置为零。 – resueman

+0

颜色值存储为“0xAARRGGBB”。如果你想要一个不同的alpha,用你想要的值('00'和'FF')替换alpha部分('00')。 – resueman

+0

所以如果我改变它会改变被替换的颜色? – Repardeimaj

考虑格式0xAARRGGBB其中AA是alpha(透明度),RR是红色,GG是绿色,和BB是蓝色分量。这是十六进制的,所以值范围从00到FF(255)。

你的问题是关于alpha值的替换。这条线:

public int markerRGB = 0xFF000000;

如果考虑像0xFF000000(黑色)的值,AND将返回0x00000000这也是黑色的零α值,透明色。同样,您将得到透明的alpha值,这会在您将值分配到markerRGB之后使图像的某些点透明。