将位图写入sdcard使用字节数组?

时间:2013-06-24 07:57:02

标签: android

我想写位图到sdcard使用byte []按照下面的代码: (我不会使用“ Bitmap.compress(...)”因为.PNG非常慢。)

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; 
}

writed之后的文件位图是错误的。 PLS

1 个答案:

答案 0 :(得分:0)

我不认为您可以将字节写入文件并期望它是一个正常运行的Bitmap文件。位图文件包含除图像字节之外的其他信息,如文件头。

你最好的选择是使用Bitmap.compress()

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

此外,您可以将压缩卸载到单独的线程以保持UI响应。