JNI を使用して、次の形式で生の画像データを取得しています。
画像データは、画像の左上から右下に、各行が左から右に進む線形配列のピクセルあたり DATA32 (32 ビット) の形式で返されます。各ピクセルには、上位 8 ビットがアルファ チャネルとしてあり、下位 8 ビットが青チャネルであるため、ピクセルのビットは ARGB (最上位から最下位まで、チャネルごとに 8 ビット) です。ある時点でデータを戻す必要があります。
C では、DATA32 形式は基本的に unsigned int です。
だから私は int[] 配列を取得し、それから Buffered Image を作成しようとします
int w = 1920;
int h = 1200;
BufferedImage b = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
int[] f = (new Capture()).capture();
for(int i = 0; i < f.length; i++){;
b.setRGB(x, y, f[i]);
}
f は、ピクセル データの配列です。
Java のドキュメントによると、これは BufferedImage.TYPE_INT_ARGB が次のように動作するはずです。
整数ピクセルにパックされた 8 ビット RGBA カラー コンポーネントでイメージを表します。画像には、アルファ付きの DirectColorModel があります。このイメージのカラー データは、事前にアルファが乗算されていないと見なされます。この型を BufferedImage コンストラクターの imageType 引数として使用すると、作成されるイメージは JDK1.1 以前のリリースで作成されたイメージと一致します。
8ビットRGBAでない限り、すべてのコンポーネントを合計して8ビットでエンコードすることを意味しますか? しかし、これは不可能です。
このコードは機能しますが、生成される画像は、生成されるはずの画像とはまったく異なります。大量のアーティファクトがあります。誰かがここで何か明らかに間違っているのを見ることができますか?
でピクセルデータを取得することに注意してください
imlib_context_set_image(im);
data = imlib_image_get_data();
私のCコードでは、api http://docs.enlightenment.org/api/imlib2/html/imlib2_8c.html#17817446139a645cc017e9f79124e5a2でライブラリimlib2を使用しています