2012-07-23 2 views
8

Android 애플리케이션에서 이미지를 표시하기 위해 하나의 이미지를 byte []에서 Bitmap으로 변환하려고합니다.안드로이드 : 바이트 배열을 비트 맵으로 변환하는 방법?

바이트 [] 값이 데이터베이스에 있음을 확인하고 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) { 

     } 

답변

6

, 당신이 바이트 배열의 일부를 가지고 그 부분에 BitmapFactory.decodeByteArray 방법을 사용하는 것이 보인다. BitmapFactory.decodeByteArray 메서드에서 전체 바이트 배열을 제공해야합니다. 의견 당신은 당신의 선택 쿼리를 변경 (또는 적어도 당신의 DB에 저장되어있는 이미지의 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) { 

    } 
+0

답장을 보내 주셔서 감사합니다! 그 방법으로 전체 바이트 배열을 공급하는 방법을 알려주십시오. – Benben

+0

'rset4' 변수가 무엇인지 명시 해 주시겠습니까? 게시 된 코드를 보면 이미지의 바이트 배열이있는 것 같습니다. – Angelo

+1

OK, rset4는 SQL 실행 결과를 저장하는 ResultSet의 값입니다. 'ResultSet rset4 = null; rset4 = stmt4.executeQuery ("select * from images from id ="+ id); ' – Benben

12

바이트를 비트 맵으로 변환하여 사용하는 것이 저에게 효과적입니다. 이 바이트를 배열을 소요하고 비트 맵으로 변환으로

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

당신은, 선 위에 루프의 외부를 넣어해야합니다.

P. : - 여기 imageData는 바이트 배열 of Image

+0

고맙습니다. 하지만 지금은 효과가 없습니다. 나는 또한 이미지의 바이트 배열을 사용한다. 내 바이트 배열에 몇 가지 문제가 있습니까? – Benben

관련 문제