android95 缩放加载大图片

MainActivity:

package com.itheima.loadimage;

import android.os.Bundle;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.BitmapFactory.Options;
import android.graphics.Point;
import android.view.Display;
import android.view.Menu;
import android.view.View;
import android.widget.ImageView;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    /*#加载大图片
    * 计算机把图片所有像素信息全部解析出来,保存至内存,会内存溢出,因此要缩放。
    * Android保存图片像素信息,是用ARGB保存
    * 手机屏幕320*480,总像素:153600
    * 图片宽高2400*3200,总像素7680000
    图片的总像素大于屏幕的总像素,因此要对图片进行缩放,否则内存会溢出。
    * 2400 / 320 = 7,宽缩放比例
    * 3200 / 480 = 6,高的缩放比例
    图片的宽和高的缩放比例要一样,选择大的作为缩放比例。*/

    public void click(View v){
        //解析图片时需要使用到的参数都封装在这个对象里了
        Options opt = new Options();
        //不返回图片不加载图片到内存只获取图片宽高,避免了内存溢出。
        opt.inJustDecodeBounds = true;
        BitmapFactory.decodeFile("sdcard/dog.jpg", opt);//该方法返回null
        //拿到图片宽高
        int imageWidth = opt.outWidth;
        int imageHeight = opt.outHeight;
        
        Display dp = getWindowManager().getDefaultDisplay();
        //拿到屏幕宽高
        int screenWidth = dp.getWidth();
        int screenHeight = dp.getHeight();
        
        //计算缩放比例
        int scale = 1;
        int scaleWidth = imageWidth / screenWidth;//图片的宽除以屏幕的宽
        int scaleHeight = imageHeight / screenHeight;//图片的高除以屏幕的高
        if(scaleWidth >= scaleHeight && scaleWidth >= 1){
            scale = scaleWidth;//缩放比例哪个大用哪个
        }
        else if(scaleWidth < scaleHeight && scaleHeight >= 1){
            scale = scaleHeight;
        }
        
        //设置缩放比例
        opt.inSampleSize = scale;
        opt.inJustDecodeBounds = false;//设置false就会去加载图片到内存而不是仅仅加载图片的信息,
        Bitmap bm = BitmapFactory.decodeFile("sdcard/dog.jpg", opt);//bm就是缩放之后的图片
        
        ImageView iv = (ImageView) findViewById(R.id.iv);
        iv.setImageBitmap(bm);
    }
    
}
#多媒体概念
* 文字、图片、音频、视频
#计算机图片大小的计算
> 图片大小 = 图片的总像素 * 每个像素占用的大小

* 单色图:每个像素表示一种颜色,则用1位就可以表示0-1,则每个像素占用1/8个字节,图片大小等于图片的像素数乘以每个像素的大小。
* 16色图:每个像素有16种颜色,则用4位0000-1111就可以表示了,即占用4位,一个字节有8位,则每个像素占用1/2个字节,图片大小等于图片的像素数乘以每个像素的大小。
* 256色图:每个像素有256种颜色,则用8位就可以表示了00000000-11111111,每个像素占用1个字节,图片大小等于图片的像素数乘以每个像素的大小。
* 24位图:每个像素占用24位则3个字节,图片大小等于图片的像素数乘以每个像素的大小。

 

原文地址:https://www.cnblogs.com/yaowen/p/4963265.html