android,java,简单位图编码
我需要下载位图,编码它并保存到sd卡。 我对第一步和第三步没有问题,但对第二步没有问题。 我不需要复杂的编码算法,所以我只需要反转下载过程中接收到的字节数组:android,java,简单位图编码,java,bytearray,Java,Bytearray,我需要下载位图,编码它并保存到sd卡。 我对第一步和第三步没有问题,但对第二步没有问题。 我不需要复杂的编码算法,所以我只需要反转下载过程中接收到的字节数组: private static byte[] vice_versa(byte[] bytes) { if (bytes == null) { assert false; return null; } byte[] result = new byte[bytes.length];
private static byte[] vice_versa(byte[] bytes) {
if (bytes == null) {
assert false;
return null;
}
byte[] result = new byte[bytes.length];
for (int i = 0; i < bytes.length; i++) {
result[bytes.length - 1 - i] = bytes[i];
}
return result;
}
我按如下方式加载保存的文件:
...
byte[] bytes = FileUtils.readFileToByteArray(getFile());
bytes = vice_versa(bytes);
Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, 0);
...
但是,BitmapFactory无法解码字节数组并返回null。我能够比较解码字节流和原始字节流。流长度相同,所有字节都相同,但Object.equals返回false。这是怎么可能的?发生了什么事?你的问题不是很清楚(你说的是哪个
等于()
?),但似乎你把它搞糊涂了
array1.equals(array2)
和Arrays.equals(array1,array2)
,请参见什么对象.equals()返回false?你比较的对象是什么?你能发布BitmapFactory.decodeByteArray()方法吗?旁注:反之亦然
是一个奇怪的方法名称-那么reverseByteArray
呢?你试过没有步骤2的步骤1和步骤3吗?也就是说,你确定你原来拥有的东西可以被位图工厂
解码吗?我真的把array1.equals()和Arrays.equals()搞混了。实际上,Arrays.equals()返回true,我所做的错误是将第三个参数作为0传递给bmp工厂:BitmapFactory.decodeByteArray(字节,0,0);相反,应该是:BitmapFactory.decodeByteArray(字节,0,字节.长度);
...
byte[] bytes = FileUtils.readFileToByteArray(getFile());
bytes = vice_versa(bytes);
Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, 0);
...