3

各バイトが 1 ピクセルのグレースケール値である生の画像ファイル (グレースケール センサーデータ) をいくつか持っています。したがって、すべてのピクセルは 8 ビット値です。私のネイティブ コードでは、その (生の) バイト (画像処理) に取り組み、その後、バイト配列を DirectByteBuffer (Java-NIO) を使用して Java-VM に渡します。

私のJavaコードでは、ImageViewで画像データを描画したいと思います。したがって、画像データを入れるビットマップを使用します。Java側で行うことは次のとおりです。

// getLeftImageData() is the native function that returns the
// DirectByteBuffer with the imagedata to be drawn. Each Byte
// is one pixel value.
IntBuffer leftImageData = getLeftImageData().asIntBuffer();
int[] arrayL = new int[leftImageData.remaining()];
leftImageData.get(arrayL);
Bitmap.Config conf = Bitmap.Config.ARGB_8888;
Bitmap bmpL = Bitmap.createBitmap(1920/4, 1080/4, conf);
bmpL.setPixels(arrayL, 0, 1920, 0, 0, 1920/4, 1080/4);
ImageView imageL = (ImageView)findViewById(R.id.imageLeft);
imageL.setImageBitmap(bmpL);

そして、ここに私の問題があります。これまでのところすべて正常に動作していますが、setPixels()メソッドは、各 int 値が 1 つのピクセル値である必要がある int 配列を想定しています。したがって、DirectByteBuffer を IntBuffer (asIntBuffer() メソッド) と見なします。しかし、4 ピクセル (=4 バイト) が 1 つの整数ピクセル値にまとめられているため、これは実際には私が望むものではありません。私の言いたいことがわかりますか?バイト配列でビットマップのピクセルを設定する方法はありません。整数配列のみを渡すことができます。したがって、8 ビット値を 32 ビット整数形式にするためには、バイト配列を変更する必要があります (もちろん、元のサイズの 4 倍に増やします)。

バイト配列を変更せずに Android ImageView に画像データを表示する方法はありますか? ビットマップなどを使わずに方法があるかもしれません..?私はかなりアンドロイドに慣れていません。

4

1 に答える 1