JAVA 言語を使用して jpeg 画像のピクセル値を抽出し、さらに操作するために配列 (bufferdArray) に格納する必要があります。では、jpeg画像形式からピクセル値を抽出するにはどうすればよいですか?
3 に答える
BufferedImage.getRGB()を見てください。
これは、画像を引き離してピクセルの条件付きチェック/変更を行う方法の簡略化された説明例です。必要に応じてエラー/例外処理を追加します。
public static BufferedImage exampleForSO(BufferedImage image) {
BufferedImage imageIn = image;
BufferedImage imageOut =
new BufferedImage(imageIn.getWidth(), imageIn.getHeight(), BufferedImage.TYPE_4BYTE_ABGR);
int width = imageIn.getWidth();
int height = imageIn.getHeight();
int[] imageInPixels = imageIn.getRGB(0, 0, width, height, null, 0, width);
int[] imageOutPixels = new int[imageInPixels.length];
for (int i = 0; i < imageInPixels.length; i++) {
int inR = (imageInPixels[i] & 0x00FF0000) >> 16;
int inG = (imageInPixels[i] & 0x0000FF00) >> 8;
int inB = (imageInPixels[i] & 0x000000FF) >> 0;
if ( conditionChecker_inRinGinB ){
// modify
} else {
// don't modify
}
}
imageOut.setRGB(0, 0, width, height, imageOutPixels, 0, width);
return imageOut;
}
JPEGをJavaで読み取り可能なオブジェクトに取り込む最も簡単な方法は、次のとおりです。
BufferedImage image = ImageIO.read(new File("MyJPEG.jpg"));
BufferedImageは、画像内の正確なピクセル位置(XY整数座標)でRGB値を取得するためのメソッドを提供するため、それを1次元配列に格納する方法を理解するのはあなた次第ですが、それが要点です。 。
バッファリングされた画像を取得して整数配列に変換する方法があります。配列内の各整数は、画像内のピクセルの RGB 値を表します。
int[] pixels = ((DataBufferInt)image.getRaster().grtDataBuffer()).getData();
興味深いことに、整数配列内の要素が編集されると、画像内の対応するピクセルも編集されます。
x 座標と y 座標のセットから配列内のピクセルを見つけるには、このメソッドを使用します。
public void setPixel(int x, int y ,int rgb){
pixels[y * image.getWidth() + x] = rgb;
}
座標の乗算と加算を行っても、BufferedImage クラスで setRGB() メソッドを使用するよりも高速です。
編集:また、画像のタイプはTYPE_INT_RGBのタイプである必要があり、デフォルトではそうではないことに注意してください。これは、同じサイズで TYPE_INT_RGB のタイプの新しいイメージを作成することで変換できます。次に、新しい画像のグラフィックス オブジェクトを使用して、元の画像を新しい画像に描画します。
public BufferedImage toIntRGB(BufferedImage image){
if(image.getType() == BufferedImage.TYPE_INT_RGB)
return image;
BufferedImage newImage = new BufferedImage(image.getWidth(), image.getHeight, BufferedImage.TYPE_INT_RGB);
newImage.getGraphics().drawImage(image, 0, 0, null);
return newImage;
}