如何知道字节数组是否是有效图像

时间:2015-07-22 10:33:52

标签: android bitmap bytearray android-image

有没有办法知道字节数组是否是有效图像?

我正在拍照,在OnActivityResult:

Bitmap imageBitmap = (Bitmap) extras.get("data");
imageBitmap.compress(Bitmap.CompressFormat.JPEG, 75, out);
//arrayFotos is an ArrayList
arrayFotos.add(new BeanFotos("", imageBitmap, lastKnwonLocation.getLatitude(), lastKnwonLocation.getLongitude()));

我将它存储在数据库中:

//listaFotos and arrayFotos are the same array, but with different names, because I am storing it in another class in my app
for(int i=0;i<listaFotos.size();i++){
values.clear();
values.put("codficha", codficha);
int bytes=listaFotos.get(i).getFoto().getByteCount();
ByteBuffer buffer = ByteBuffer.allocate(bytes);
listaFotos.get(i).getFoto().copyPixelsToBuffer(buffer);
values.put("foto", buffer.array());
db.insert("fotos", null, values);
}

稍后,我需要显示该图像:

byte[] arrayFoto = csr2.getBlob(0);
Bitmap fotoBitmap=BitmapFactory.decodeByteArray(arrayFoto, 0, arrayFoto.length);

问题是,无论我做什么,decodeByteArray方法总是返回null。我尝试过使用外部库,它总是为空,所以我想也许我会以错误的方式存储它。 arrayFoto变量是非null,我接收字节(确切地说是84584),但decodeByteArray方法返回null。

那么,有没有办法确保字节数组是正确的图像?

感谢。

1 个答案:

答案 0 :(得分:0)

您似乎正在将未压缩的位图写入数据库。如果您希望能够使用BitmapFactory对其进行解码,则需要先将其压缩为jpeg或png。

此外,将图像存储在数据库中是一个坏主意,因为光标窗口大小限制为1MB。您不应该将二进制数据存储在SQLite数据库中,除非它非常小。