2012-07-23 4 views
8

Androidアプリケーションで画像を表示するために、1つの画像をbyte []からBitmapに変換しようとしています。Android:バイト配列をBitmapに変換するには?

バイト[]の値はデータベースで得られ、nullではないことを確認しました。 その後、私はイメージを変換したいですが、成功できませんでした。プログラムは、ビットマップの値が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) { 

     } 

答えて

6

、あなたがバイト配列の部分を取り、その部分にBitmapFactory.decodeByteArrayメソッドを使用しているようです。 BitmapFactory.decodeByteArrayメソッドでバイト配列全体を指定する必要があります。あなたは(あなたのDBに格納されている画像のBLOBデータを持つ列の)または少なくとも名前(またはインデックスを知っている)あなたの選択クエリを変更する必要がコメント

から

EDIT。また、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) { 

    } 
+0

ありがとうございました!その方法でバイト配列全体を供給する方法を教えてください。 – Benben

+0

'rset4'変数の内容を教えてください。投稿されたコードを見ると、画像のバイト配列があるようです。 – Angelo

+1

OK、rset4はSQLを実行した結果を格納するResultSetの値です。 'ResultSet rset4 = null; rset4 = stmt4.executeQuery( "select * from images where id =" + id ";) – Benben

12

使用、それは私のために働いています。

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

あなたはそれがバイト配列を取るよう、ループの外線の上に置くと、ビットマップに変換する必要があります。

P.S. : - imageDataはバイト配列の画像

+0

ありがとうございます。しかし、今はまだ動作しません。私はまた、イメージのバイト配列を使用します。 バイト配列に問題がありますか? – Benben