BufferedImageがあり、アルファ値を含むその特定のピクセルから色i
を取得したいと思います。ピクセルは、座標を使用して識別されます。image
x
y
これが私が試したことです:
Color c = new Color(i.getRGB(x, y));
何らかの理由で、新しいカラーオブジェクトには正しいRGBが含まれていますが、アルファは失われます。
私は何が間違っているのですか?
前もって感謝します
BufferedImageがあり、アルファ値を含むその特定のピクセルから色i
を取得したいと思います。ピクセルは、座標を使用して識別されます。image
x
y
これが私が試したことです:
Color c = new Color(i.getRGB(x, y));
何らかの理由で、新しいカラーオブジェクトには正しいRGBが含まれていますが、アルファは失われます。
私は何が間違っているのですか?
前もって感謝します
使用している単一パラメーターの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色を作成します。
アルファは失われません。
ピクセル情報を取得する(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値も取得されることを意味します。