Android:Issue Image resolution

落花浮王杯 提交于 2019-11-28 14:12:24

Try to create Bitmap instead of Drawable:

Bitmap bmp = BitmapFactory.decodeStream(ims);
a.setImageBitmap(bmp);

Looks like Android doing some tricks with drawables, depending of screen density.

Hope following solution helps. You can make your imageView of fixed size and pass that imageView's width and height to calculateInSampleSize method. Based on image size, it will decide whether to down sample the image or not.

public Bitmap getBitmap(Context context, final String imagePath)
{
    AssetManager assetManager = context.getAssets();
    InputStream inputStream = null;
    Bitmap bitmap = null;
    try
    {
        inputStream = assetManager.open(imagePath);         

        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inScaled = true;
        options.inJustDecodeBounds = true;

        // First decode with inJustDecodeBounds=true to check dimensions
        bitmap = BitmapFactory.decodeStream(inputStream);

        // Calculate inSampleSize
        options.inSampleSize = calculateInSampleSize(options, requiredWidth, requiredHeight);

        options.inJustDecodeBounds = false;

        bitmap = BitmapFactory.decodeStream(inputStream);
    }
    catch(Exception exception) 
    {
        exception.printStackTrace();
        bitmap = null;
    }

    return bitmap;
}


public int calculateInSampleSize(BitmapFactory.Options options, final int requiredWidth, final int requiredHeight) 
{
    // Raw height and width of image
    final int height = options.outHeight;
    final int width = options.outWidth;
    int inSampleSize = 1;

    if(height > requiredHeight || width > requiredWidth) 
    {
        if(width > height) 
        {
            inSampleSize = Math.round((float)height / (float)requiredHeight);
        } 
        else 
        {
            inSampleSize = Math.round((float)width / (float)requiredWidth);
        }
    }

    return inSampleSize;
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!