java - 将位图转换为字节数组,字符串,然后一路返回

标签 java android string bitmap bytearray

我尝试了 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的图像。

最佳答案

问题不在于转换,而在于你如何验证结果。使用 == 比较两个数组仅当它们是相同的数组引用时才返回 true。由于您使用 byte[] newImageBytes = encodedString.getBytes(); 创建了一个新数组,因此这将始终为 false。 See this question for reference.

另一方面,如果您要以某种方式传输或使用字符串,最好使用 Base64.encodeToString(imageBytes, Base64.NO_WRAP); 来获取字符串,并用 Base64.decode(encodedString, Base64.NO_WRAP) 取回它.
您还可以在不压缩的情况下获取字节数组,使用 copyPixelsToBuffer()方法(参见 this question 示例)。

关于java - 将位图转换为字节数组,字符串,然后一路返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20621285/

相关文章:

java - 使用 SQL 创建表时出现空格

android - 关于 Click 实现在 Kotlin 中不起作用

android - 如何在 Activity 中拆分 ListView

java - 这两种方法有哪些内存(或性能)问题?

java - 如果字符串包含 "xyz"且前面没有直接加句点,则返回 true 的函数?

java - Cassandra Astyanax 文档

java - Spark 在具有 2 个工作线程的集群上的 JdbcRDD 中抛出 NullPointerException

c# - 如何按位置替换字符串的一部分?

java - 如何在另一个类中模拟一个类junit mockito

android - 如何清理 Android 项目?