Android中的ImageView位图为空(MySQL数据库)

时间:2017-05-06 06:59:13

标签: java android bitmap

我在MySQL数据库中保存图像的byteArray,然后从数据库中检索,然后将字符串转换为byteArray,然后将byteArray转换为Bitmap。但Bitmap是Null我已经尝试了很多代码但仍然是NULL。 保存图像

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;

    }

获取图片

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

寻找专家通过解决方案获得准确的错误。

2 个答案:

答案 0 :(得分: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 :(得分:0)

Base64String对大位图效果不佳。因此,首先必须在将位图转换为base64String之前减小位图的大小。我附加了一个用于减小位图大小的代码。 您可以在此代码中使用maxWidth = 960.0和maxheight = 1280.0。

    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;
}