Bitmap图片的二次采样

xiaoxiao2021-02-28  16

import java.io.InputStream; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.BitmapFactory.Options; import android.os.Bundle; import android.util.DisplayMetrics; import android.util.Log; import android.widget.ImageView; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ImageView iv = (ImageView) findViewById(R.id.iv); //创建一个显示矩阵 DisplayMetrics metrics = new DisplayMetrics(); //把屏幕的宽高放如该矩阵中 getWindowManager().getDefaultDisplay().getMetrics(metrics); //从显示矩阵中把屏幕宽高获取出来 int width = metrics.widthPixels; int height = metrics.heightPixels; Log.i("=======================", width + "-----" + height); try { // 目的:通过任何方式 能获取到图片的输入流就行 InputStream is = getAssets().open("aaa.jpg"); BitmapFactory.Options options = new BitmapFactory.Options(); // 把options中的inJustDecodeBounds参数设置成true代表 只获取图片的基本信息(头信息) // 基本信息中 包括图片的描述 例如 宽高 图片格式 大小 options.inJustDecodeBounds = true; // 使用处理图片的工厂类 可以吧 图片的数据流变成Bitmap图片资源 // 二次采样   使用options对象进行二次采样的过程   那么图片的头信息  都会保存到options对象中 BitmapFactory.decodeStream(is, null, options); int bmWidth = options.outWidth; int bmHeight = options.outHeight; //使用屏幕和图片的宽高  可以计算一个图片的显示大小 int scaleX = bmWidth/width; int scaleY = bmHeight/height; if(scaleX >= scaleY && scaleX >= 1){ options.inSampleSize = scaleX * 2; } if(scaleY >= scaleX && scaleY >= 1){ options.inSampleSize = scaleY * 2; } Log.i("=======================", bmWidth + "-----" + bmHeight + "------" + options.inSampleSize); options.inJustDecodeBounds = false; //宽高都缩小4倍  总内存会减少 4*4 = 16倍 // options.inSampleSize = 4; Bitmap bm = BitmapFactory.decodeStream(is, null, options); iv.setImageBitmap(bm); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
转载请注明原文地址: https://www.6miu.com/read-200069.html

最新回复(0)