16

BufferedImageがあり、アルファ値を含むその特定のピクセルからiを取得したいと思います。ピクセルは、座標を使用して識別されます。image xy

これが私が試したことです:

Color c = new Color(i.getRGB(x, y));

何らかの理由で、新しいカラーオブジェクトには正しいRGBが含まれていますが、アルファは失われます。

私は何が間違っているのですか?

前もって感謝します

4

2 に答える 2

22

使用している単一パラメーターのColorコンストラクターは、アルファ情報を破棄します。代わりに2パラメータバージョンを使用し、次のように渡しtrueますhasalpha

Color c = new Color(i.getRGB(x, y), true);

関連するJavadoc

Color(int rgb)

ビット16〜23の赤のコンポーネント、ビット8〜15の緑のコンポーネント、およびビット0〜7の青のコンポーネントで構成される指定された結合RGB値を使用して、不透明なsRGBカラーを作成します。

Color(int rgba, boolean hasalpha)

ビット24〜31のアルファ成分、ビット16〜23の赤成分、ビット8〜15の緑成分、およびビット0〜7の青成分で構成される指定された結合RGBA値でsRGB色を作成します。

于 2012-05-23T19:46:56.880 に答える
5

アルファは失われません。

ピクセル情報を取得する(int、boolean)コンストラクターを使用して、ブール値でアルファ値を指定するか、Red、Green、Blue、Alphaの4つの値を取得するコンストラクターを指定する必要があります。

JavaDocからの(int、int、int、int)コンストラクタ情報

Color color = new Color(i.getRGB(x, y), true); コードを短縮するために、ピクセル情報にアルファ値が含まれていることをカラーコンストラクターに通知する次のすべてのコードをいつでも置き換えることができ ます。

JavaDocからの(int、boolean)コンストラクタ情報

アルファを取得するときに、次の方法で-1が返される場合があることに注意してください。この場合、これは255にループバックすることを意味するため、実際のアルファ値を取得するには256-1を実行する必要があります。このスニペットは、画像をロードして、特定の座標(この場合は0,0)でその画像の色を取得する方法を示しています。次の例は、アルファを含む各色の値を取得し、それを新しい色に再構築する方法を示しています。

import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;

import javax.imageio.ImageIO;

public class main {

    public static void main(String [] args){
        BufferedImage image = null;
        try {
            image = ImageIO.read(new URL("image.png"));
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        int pixel = image.getRGB(0, 0);

        int alpha = (pixel >> 24) & 0xff;
        int red = (pixel >> 16) & 0xff;
        int green = (pixel >> 8) & 0xff;
        int blue = (pixel >> 0) & 0xff;

        Color color1 = new Color(red, green, blue, alpha);

        //Or use
        Color color2 = new Color(image .getRGB(0, 0), true);

    }
   }

BufferedImages getRGB(int、int)JavaDocは、次のように表示されます。

Returns an integer pixel in the default RGB color model (TYPE_INT_ARGB) and default sRGB colorspace. Color conversion takes place if this default model does not match the image ColorModel. There are only 8-bits of precision for each color component in the returned data when using this method.

これは、Alpha値も取得されることを意味します。

于 2012-05-23T19:50:06.770 に答える