Android:如何将字节数组转换为Bitmap?

时间:2012-07-23 13:34:23

标签: android bitmap bytearray

我试图将一个图像从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) {

        }

2 个答案:

答案 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) {

    }