2

ビットマップをSDカードに書き込みたい byte[] 以下のコードを使用します( .PNGでは非常に遅いため、 「 Bitmap.compress(...) 」は使用しません)。

Bitmap bmp;
// Convert bitmap -> Byte[] 
byte[] byteArray = bitmapToByteArray(bmp); 
// convert byte[] -> inputstream 
InputStream inStream = new ByteArrayInputStream(byteArray); 
FileOutputStream fos = new FileOutputStream(pathFile); 
int b; 
byte[] d = new byte[4096]; 
while ((b = inStream.read(d)) != -1) { 
    fosX.write(d, 0, b); 
} 
// Function convert bitmap -> byte[] 
public static byte[] bitmapToByteArray(Bitmap bm) { 
    int bytes = bm.getWidth()*bm.getHeight()*4; 
    ByteBuffer buffer = ByteBuffer.allocate(bytes); 
    bm.copyPixelsToBuffer(buffer); 
    byte[] array = buffer.array(); 
    return array; 
}

書き込み後のファイル ビットマップがエラーです。お願いします

4

1 に答える 1

0

バイトをファイルに書き込むだけで、それが機能するビットマップファイルであると期待できるとは思いません。ビットマップ ファイルには、ファイル ヘッダーなど、イメージのバイト以外の情報が含まれています。

Bitmap.compress() を使用することをお勧めします

FileOutputStream fos= new FileOutputStream(pathFile);
bitmap.compress(Bitmap.CompressFormat.PNG, 80, fos);

また、圧縮を別のスレッドにオフロードして、UI の応答性を維持することもできます。

于 2013-06-24T10:46:00.940 に答える