2

画像を読み込んで青色効果にし、半透明にする簡単なプログラムを作ってみました。画像のピクセルで実行し、RGB の青の値とアルファ値を変更して実行しています。画像に素敵な青い効果を加えることに成功しました。しかし、画像の不透明度を変更することはできませんでした。ピクセルのアルファ値をどのように変更しても、画像には影響しないようです。

これが私のコードです:

try {
    image1 = ImageIO.read(new File("image1.png"));
} catch(IOException e) {e.printStackTrace();}


for(int x=0;x<image1.getWidth();x++) {
    for(int y=0;y<image1.getHeight();y++) {
        int rgb = image1.getRGB(x, y);
        Color color = new Color(rgb);
        int r = color.getRed();
        int g = color.getGreen();
        int b = color.getBlue();
        int a = color.getAlpha();

        System.out.println(a);
        a= 100;
        if(b<155)
            b+=100;
        else
            b=255;

        color = new Color(r,g,b,a);

        image1.setRGB(x, y, color.getRGB());
    }
}

更新:私もこれを試しました。まだ動作しません:

for(int x=0;x<image1.getWidth();x++) {
    for(int y=0;y<image1.getHeight();y++) {
        int rgb = image1.getRGB(x, y);
        Color color = new Color(rgb,true);
        int r = color.getRed();
        int g = color.getGreen();
        int b = color.getBlue();
        int a = color.getAlpha();

        a= 100;
        if(b<155)
            b+=100;
        else
            b=255;


        rgb = rgb | b;
        rgb = rgb & 0x33ffffff;


        image1.setRGB(x, y, rgb);
    }
}
4

2 に答える 2

1

AlphaCompositeを使用します。

BufferedImage img = //some code here
BufferedImage imgClone = //some clone of img, but let its type be BufferedImage.TYPE_INT_ARGB
Graphics2D imgCloneG = imgClone.createGraphics();
imgCloneG.setComposite(AlphaComposite.getInstance(AlphaComposite.DST_IN, 0.5f));
imgCloneG.drawImage(img, 0, 0, null);
//imgClone is now img at half alpha

imgClone次のように作成できます。

...
imgClone = new BufferedImage(img.getWidth(), img.getHeight(), 
                             BufferedImage.TYPE_INT_ARGB);
Graphics2D imgCloneG = imgClone.createGraphics();
imgCloneG.drawImage(img, 0, 0, null);
imgCloneG.setComposite(AlphaComposite.getInstance(AlphaComposite.DST_IN, 0.5f));
...
于 2013-04-23T21:15:25.280 に答える
0

のみを受け取るColorコンストラクターintは、不透明な色 (アルファ 255) を作成します。で再度αを出すとgetAlpha()、ここは常に255です。

413 行目からの関連する JavaColorコード (少なくとも Java 1.7 では):

public Color(int rgb) {
    value = 0xff000000 | rgb;
}

最上位の 8 バイトが設定され、そこにあったアルファ コンポーネントが上書きされます。

アルファ コンポーネントを保持するには、値を使用し、アルファ コンポーネントがあるかどうかに を使用するColorコンストラクタを使用する必要があります。intboolean

Color color = new Color(rgb, true);
于 2013-04-22T20:51:06.017 に答える