12

我正在尝试将一张图像从 byte[] 转换为 Bitmap 以在 Android 应用程序中显示该图像。

byte[] 的值是由数据库获取的,我检查它是否为空。之后,我想转换图像但无法成功。程序显示 Bitmap 的值为空。

我认为在转换过程中存在一些问题。

如果您知道任何提示,请告诉我。

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

        }
4

2 回答 2

19

使用下面的行将字节转换为位图,它对我有用。

  Bitmap bmp = BitmapFactory.decodeByteArray(imageData, 0, imageData.length);

您需要将上述行放在循环之外,因为它需要字节数组并转换为位图。

PS :- 这里imageData 是图像的字节数组

于 2012-07-23T13:42:56.473 回答
9

从您的代码中,您似乎获取了字节数组的一部分并使用该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) {

    }
于 2012-07-23T13:41:22.083 回答