我试图将一个图像从byte []转换为Bitmap,以在Android应用程序中显示图像。
byte []'的值是由数据库得到的,我检查它不是null。 在那之后,我想转换图像,但无法成功。该程序显示Bitmap的值为null。
我认为转换过程存在一些问题。
如果您有任何提示,请告诉我。
byte[] image = null;
Bitmap bitmap = null;
try {
if (rset4 != null) {
while (rset4.next()) {
image = rset4.getBytes("img");
BitmapFactory.Options options = new BitmapFactory.Options();
bitmap = BitmapFactory.decodeByteArray(image, 0, image.length, options);
}
}
if (bitmap != null) {
ImageView researcher_img = (ImageView) findViewById(R.id.researcher_img);
researcher_img.setImageBitmap(bitmap);
System.out.println("bitmap is not null");
} else {
System.out.println("bitmap is null");
}
} catch (SQLException e) {
}
答案 0 :(得分:15)
使用下面的行将字节转换为Bitmap,它对我有用。
Bitmap bmp = BitmapFactory.decodeByteArray(imageData, 0, imageData.length);
你需要将放在之外的行上面,因为它需要Bytes Array并转换为Bitmap。
P.S。 : - 这里 imageData是Image
的字节数组答案 1 :(得分:6)
从您的代码中,您似乎占用了字节数组的一部分并在该部分中使用BitmapFactory.decodeByteArray
方法。您需要在BitmapFactory.decodeByteArray
方法中提供整个字节数组。
来自评论的编辑
您需要更改您的选择查询(或者至少知道包含存储在数据库中的图像的blob数据的列的名称(或索引))。同样,getByte
使用ResultSet类的getBlob
方法。假设列名为image_data
。有了这些信息,请将代码更改为以下内容:
byte[] image = null;
Bitmap bitmap = null;
try {
if (rset4 != null) {
Blob blob = rset4.getBlob("image_data"); //This line gets the image's blob data
image = blob.getBytes(0, blob.length); //Convert blob to bytearray
BitmapFactory.Options options = new BitmapFactory.Options();
bitmap = BitmapFactory.decodeByteArray(image, 0, image.length, options); //Convert bytearray to bitmap
//for performance free the memmory allocated by the bytearray and the blob variable
blob.free();
image = null;
}
if (bitmap != null) {
ImageView researcher_img = (ImageView) findViewById(R.id.researcher_img);
researcher_img.setImageBitmap(bitmap);
System.out.println("bitmap is not null");
} else {
System.out.println("bitmap is null");
}
} catch (SQLException e) {
}