我尝试了Java文档中找到的几种不同方法,以及其他SO问题的几种解决方案,并成功Bitmap
地将a转换为abyte[]
并再次返回。
问题是我现在需要将此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
成功,但是将转换加到aString
并返回会导致最终Bitmap
写入0kb的图像。
问题不在于转换,而在于如何验证结果。使用==
比较两个阵列仅当它们是相同的数组引用返回true。由于您使用this创建新数组,byte[] newImageBytes = encodedString.getBytes();
因此始终为false。请参阅此问题以供参考。
另外请注意,如果您打算以某种方式转移或使用字符串,最好使用Base64.encodeToString(imageBytes, Base64.NO_WRAP);
来获取字符串,然后用取回Base64.decode(encodedString, Base64.NO_WRAP)
。
您也可以使用方法获得字节数组而不进行压缩copyPixelsToBuffer()
(请参阅此问题的示例)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句