6

copyPixelsFromBuffer と copyPixelsToBuffer を使用している場合、ビットマップが同じものとして表示されないため、以下のコードを試しました。

Bitmap bm = BitmapFactory.decodeByteArray(a, 0, a.length);
int[] pixels = new int[bm.getWidth() * bm.getHeight()];
bm.getPixels(pixels, 0, bm.getWidth(), 0, 0,bm.getWidth(),bm.getHeight());

ByteBuffer buffer = ByteBuffer.allocate(bm.getRowBytes()*bm.getHeight());
bm.copyPixelsToBuffer(buffer);//I copy the pixels from Bitmap bm to the buffer

ByteBuffer buffer1 = ByteBuffer.wrap(buffer.array());
newbm = Bitmap.createBitmap(160, 160,Config.RGB_565);
newbm.copyPixelsFromBuffer(buffer1);//I read pixels from the Buffer and put the pixels     to the Bitmap newbm.

imageview1.setImageBitmap(newbm);
imageview2.setImageBitmap(bm);

Bitmap bm と newbm で同じコンテンツが表示されなかったのはなぜですか?

4

1 に答える 1

1

コードでは、ピクセルをフォーマット付きのビットマップにコピーしてRGB_565いますが、ピクセルを取得した元のビットマップは別のフォーマットでなければなりません。

この問題は、次のドキュメントから明らかですcopyPixelsFromBuffer()

バッファ内のデータは、いかなる方法でも変更されませんsetPixels()(事前乗算されていない32 ビットからビットマップのネイティブ形式に変換されるとは異なります。

したがって、同じビットマップ形式を使用するsetPixels()か、元のビットマップを使用するか、呼び出しを使用して新しいビットマップに描画しCanvas.drawBitmap()ます。

また、bm.getWidth()&bm.getHeight()を使用して、ハードコーディングする代わりに新しいビットマップのサイズを指定します160

于 2012-04-01T14:16:04.987 に答える