Android大图片的二次采样

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35189116/article/details/72673835

今天来给大家看一下经典二次采样问题,看下我的和你的有什么区别吗:


public class BitmapUtils {


/**
* @param res 资源对象
* @param resId 被采样的源位图的id
* @param w 要显示的控件的宽
* @param h 要显示的控件的高
* @return
*/
//大图片二次采样
public static Bitmap createSmallBitmap(Resources res, int resId, int w, int h) {
//第一次采样:得到图片的宽高,假解析
//第二次采样,根据采样比,进行真解析,再返回

//1.BitmapFactory.Options
BitmapFactory.Options opt = new BitmapFactory.Options();
//2.设置inJustDecodeBunds为true,这样设置,解析图片时,只解析边缘,得到图片的宽度
opt.inJustDecodeBounds = true;
//3.进行第一次采样
BitmapFactory.decodeResource(res, resId, opt);
//得到图片的宽高
int imgW = opt.outWidth;
int imgH = opt.outHeight;
//计算采样比
int scale = 1;
//宽度采样 比:图片宽/控件宽
int scaleX = imgW / w;
//高度采样 比:图片的高/控件高
int scaleY = imgH / h;
//最终采样比,取大的
scale = scaleX > scaleY ? scaleX : scaleY;
//进行二次采样
//真正解析
opt.inJustDecodeBounds = false;
//设置采样比
opt.inSampleSize = scale;
//设置图片质量
opt.inPreferredConfig = Bitmap.Config.ALPHA_8;
//采样,并返回
return BitmapFactory.decodeResource(res, resId, opt);

}
}

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//找到控件
final ImageView iv = (ImageView) findViewById(R.id.iv);
//屏高和宽
int w = getResources().getDisplayMetrics().widthPixels;
int h = getResources().getDisplayMetrics().heightPixels;


//监听布局变化
iv.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
@Override
public void onGlobalLayout() {
//得到控件的宽高
//获取控件的宽高
//测量控件
int measureH = iv.getMeasuredHeight();
int measureW = iv.getMeasuredWidth();
Log.d("ytmfdw", "得到测量高:" + measureH);

// //得到控件的布局属性
// ViewGroup.LayoutParams params = iv.getLayoutParams();
// int layout_h = params.height;
// Log.d("ytmfdw", "得到布局高:" + layout_h);

//得到采样后的bitmap
Bitmap bitmap = BitmapUtils.createSmallBitmap(getResources(), R.drawable.oom, measureW, measureH);
//设置
iv.setImageBitmap(bitmap);

//解除监听
iv.getViewTreeObserver().removeOnGlobalLayoutListener(this);

}
});


}
}


猜你喜欢

转载自blog.csdn.net/qq_35189116/article/details/72673835