2012-07-23 16 views
8

Próbuję przekonwertować jeden obraz z bajtu [] na Bitmapę, aby wyświetlić obraz w aplikacji na Androida.Android: jak przekonwertować tablicę bajtów na Bitmapę?

Wartość bajtu [] jest pobierana przez bazę danych i sprawdziłem, czy nie jest ona pusta. Po tym chciałbym przekonwertować obraz, ale nie mógł osiągnąć sukcesu. Program pokazuje, że wartość Bitmap ma wartość NULL.

Myślę, że są pewne problemy w procesie konwersji.

Jeśli znasz jakieś wskazówki, pokaż mi.

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

     } 

Odpowiedz

6

z kodu, wydaje się, że bierzesz część tablicy bajtów i użyć metody BitmapFactory.decodeByteArray w tej części. Musisz dostarczyć całą tablicę bajtów w metodzie BitmapFactory.decodeByteArray.

EDIT z uwag

Trzeba zmienić kwerendę wybierającą (lub przynajmniej znać nazwę (lub indeks) kolumny, która ma dane blob obrazu przechowywanego w dB). Również intead z getByte używa metody getBlob klasy . Załóżmy, że nazwa kolumny to image_data. Mając te informacje, zmienić swój kod na coś takiego:

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

Dziękujemy za odpowiedź! Proszę dać mi znać, jak dostarczyć całą tablicę bajtów w tej metodzie. – Benben

+0

Czy możesz określić, czym jest zmienna 'rset4'? Widzę opublikowany kod, który wydaje się mieć tablicę bajtów obrazu. – Angelo

+1

OK, rset4 to wartość ResultSet do przechowywania wyniku wykonywania SQL. 'Resultset rset4 = null; rset4 = stmt4.executeQuery ("wybierz * z obrazów, gdzie id =" + id); ' – Benben

12

użycie poniżej linii konwertować bajtów do bitmap, to pracuje dla mnie.

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

trzeba umieścić powyżej linii poza pętlą, ponieważ bierze bajtów tablicy i konwertować do bitmapy.

P.S. : - tutaj imageData to tablica bajtów obrazu

+0

Dziękuję bardzo. Ale teraz nie działa. Używam również tablicy bajtów obrazu. Czy są jakieś problemy w mojej tablicy bajtów ...? – Benben

Powiązane problemy