2017-05-06 5 views
0

Ich speichere ByteArray eines Bildes in MySQL-Datenbank, und Abrufen von Databes dann Konvertieren Zeichenfolge in ByteArray dann ByteArray, Bitmap zu erhalten. Aber Bitmap ist Null, ich habe viele Codes ausprobiert, aber immer noch NULL. Speichern eines BildesBitmap für ein ImageView ist Null in Android (MySQL DataBase)

private String imageviewtobyte(ImageView view){ 
     Bitmap bitmap=((BitmapDrawable) view.getDrawable()).getBitmap(); 
     ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
     bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream); 
     byteArray = stream.toByteArray(); 
     ConvertImage = Base64.encodeToString(byteArray, Base64.DEFAULT); 
     return ConvertImage; 

    } 

ein Bild

imgData=result; 
    byte[] byteArray = Base64.decode(result, Base64.DEFAULT); 
    Bitmap bMap = null; 
    bMap = BitmapFactory.decodeByteArray(byteArray,0,byteArray.length); 
    testimg.setImageBitmap(bMap); 

der Suche nach Experten zu bekommen genaue Fehler mit Lösung bekommen.

+0

Haben Sie das ConvertImage überprüft? Enthält es die Zeichenfolge image? –

+0

'Speichern eines Bildes'. Dieser Code lädt kein Bild hoch und speichert irgendwo in einer MySQL-Datenbank. – greenapps

+0

ich habe hier nur konkrete code-werte gegeben, die richtig gehen und richtig kommen. Ich habe durch Debugging überprüft, aber Problem ist Bitmap-Konvertierung ist nicht Workinggg –

Antwort

0
//check result object it is null or not 
if(result != null){ 
    imgData = result; 
    Bitmap bitmap = StringToBitMap(imgData); 
    if(bitmap != null){ 
     testimg.setImageBitmap(bitmap); 
    } 
} 

/** 
* @param encodedString 
* @return bitmap (from given string) 
*/ 
public static Bitmap StringToBitMap(String encodedString){ 
    try{ 
     byte [] encodeByte=Base64.decode(encodedString,Base64.DEFAULT); 
     Bitmap bitmap= BitmapFactory.decodeByteArray(encodeByte, 0, encodeByte.length); 
     return bitmap; 
    }catch(Exception e){ 
     e.getMessage(); 
     return null; 
    } 
} 
+1

Ich habe bereits überprüft Ergebnis ist nicht null, aber lassen Sie mich dies überprüfen, indem Sie Ihre Methode implementieren –

+0

Verwenden Sie diesen Link, um zu überprüfen, ob Ihr String gültig ist bsae64 oder nicht http: // www .askapache.com/online-tools/base64-image-konverter/ –

+0

Dieser Code ist derselbe wie der von OP. Und auch wenn die Bitmap null ist, können Sie sie der Bildansicht zuweisen. – greenapps

0

Base64String funktioniert nicht gut für die große Bitmap. Zuerst müssen Sie die Größe einer Bitmap verkleinern, bevor Sie sie in base64String konvertieren. Ich habe einen Code hinzugefügt, um die Größe der Bitmap zu verringern. Sie können maxWidth = 960.0 und maxheight = 1280.0 in diesem Code verwenden.

public Bitmap GetBitmap(Bitmap finalimage) { 
    int actualHeight = finalimage.getHeight(); 
    int actualWidth = finalimage.getWidth(); 
    float imgRatio = actualWidth/actualHeight; 
    float maxRatio = maxWidth/maxHeight; 

    if (actualHeight > maxHeight || actualWidth > maxWidth) { 
     if (imgRatio < maxRatio) { 
      imgRatio = maxHeight/actualHeight; 
      actualWidth = (int) (imgRatio * actualWidth); 
      actualHeight = (int) maxHeight; 
     } else if (imgRatio > maxRatio) { 
      imgRatio = maxWidth/actualWidth; 
      actualHeight = (int) (imgRatio * actualHeight); 
      actualWidth = (int) maxWidth; 
     } else { 
      actualHeight = (int) maxHeight; 
      actualWidth = (int) maxWidth; 
     } 
    } 
    finalimage = Bitmap.createScaledBitmap(finalimage, actualWidth, actualHeight, false); 
    return finalimage; 
} 
+0

'Base64String funktioniert nicht gut für die große Bitmap. '. ??? Für eine Bitmap? Es wird nur für ein Byte-Array verwendet. Nie von Einschränkungen für ein Array gehört. – greenapps

+0

Es ist komisch, aber es ist wahr. Sie können den Link [this] (http://stackoverflow.com/questions/28641704/converting-bitmap-to-base64-string-causes-outofmemory-error) überprüfen. –

+0

Größe ist kein Problem dhruv gangani Ich habe dies überprüft –