我想写位图到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
答案 0 :(得分:0)
我不认为您可以将字节写入文件并期望它是一个正常运行的Bitmap文件。位图文件包含除图像字节之外的其他信息,如文件头。
你最好的选择是使用Bitmap.compress()
FileOutputStream fos= new FileOutputStream(pathFile);
bitmap.compress(Bitmap.CompressFormat.PNG, 80, fos);
此外,您可以将压缩卸载到单独的线程以保持UI响应。