2016-08-12 13 views
1
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;'です。これは同じ色で、アルファはゼロに設定されています。 – resueman

+0

カラー値は '0xAARRGGBB'として保存されます。別のアルファが必要な場合は、アルファ部分( '00')をあなたが望む値(' 00'と 'FF'の間)に置き換えます。 – resueman

+0

だから私はそれを交換する色を変更しますか? – Repardeimaj

答えて

1

RRが赤、AAはアルファ(透明度)であるフォーマット0xAARRGGBBを考慮し、GGは緑色であり、そしてBBは青色成分です。これは16進数なので、値の範囲は00〜FF(255)です。

あなたの質問は、アルファ値の置き換えについてです。この行:あなたは0xFF000000(黒)のような値を考慮した場合

public int markerRGB = 0xFF000000;

ANDは黒のゼロアルファ値、透明色である0x00000000を返します。同様に、markerRGBに値を代入すると、透明なアルファ値が得られ、画像の特定の点が透明になります。