Android加载大图

1.利用BitmapFactory.Options的inJustDecodeBounds属性来读取图片尺寸.
参考:Bitmaps加载之高效加载大图
这样做加载一个大图肯定会失真,如果不想失真,应该怎么做呢?


2.首先不压缩,按照原图尺寸加载,那么屏幕肯定是不够大的,并且考虑到内存的情况,不可能一次性整图加载到内存中,所以肯定是局部加载,那么就需要用到一个类:BitmapRegionDecoder
参考 [Android 高清加载巨图方案 拒绝压缩图片]

mImageView = (ImageView) findViewById(R.id.id_imageview);
try
{
    InputStream inputStream = getAssets().open("tangyan.jpg");

    //获得图片的宽、高
    BitmapFactory.Options tmpOptions = new BitmapFactory.Options();
    tmpOptions.inJustDecodeBounds = true;
    BitmapFactory.decodeStream(inputStream, null, tmpOptions);
    int width = tmpOptions.outWidth;
    int height = tmpOptions.outHeight;

    //设置显示图片的中心区域
    BitmapRegionDecoder bitmapRegionDecoder = BitmapRegionDecoder.newInstance(inputStream, false);
    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inPreferredConfig = Bitmap.Config.RGB_565;
    Bitmap bitmap = bitmapRegionDecoder.decodeRegion(new Rect(width / 2 - 100, height / 2 - 100, width / 2 + 100, height / 2 + 100), options);
    mImageView.setImageBitmap(bitmap);


} catch (IOException e)
{
    e.printStackTrace();
}

你可能感兴趣的:(Android加载大图)