我已经尝试了Java文档中提供的几种不同的方法,以及其他SO问题的多个解决方案,并成功地将Bitmap
转换为byte[]
,然后再转换回去。
问题是现在我需要将这个byte[]
转换为String
,然后再转换回一个byte[]
,最后再转换回一个Bitmap
。总结一下我的需求:
Bitmap -> byte[] -> String -> byte[] -> Bitmap
我知道这听起来很奇怪,但我必须按照这种方式完成我的任务。以下是我尝试过的方法,如果有人能指出我做错了什么,我将非常感激!
Bitmap bitmap = mv.getDrawingCache();
// Convert bitmap to byte[]
ByteArrayOutputStream output = new ByteArrayOutputStream(bitmap.getByteCount());
bitmap.compress(Bitmap.CompressFormat.PNG, 100, output);
byte[] imageBytes = output.toByteArray();
// Convert byte[] to string
// I have also tried using Base64.encodeToString(imageBytes, 0);
String encodedString = new String(imageBytes);
// Convert string to byte[]
byte[] newImageBytes = encodedString.getBytes();
if (imageBytes == newImageBytes) {
Toast.makeText(SignatureActivity.this, "SUCCESS!!", Toast.LENGTH_SHORT).show();
} else { // Sadly, we always get to this point :(
Toast.makeText(SignatureActivity.this, "BOOO", Toast.LENGTH_SHORT).show();
}
// Convert byte[] back to bitmap
bitmap = BitmapFactory.decodeByteArray(newImageBytes, 0, newImageBytes.length);
再次进行 Bitmap -> byte[] -> Bitmap
的转换是成功的,但将其添加到 String
中并再次转换回来会导致最终的 Bitmap
写入一个 0kb 大小的图像。