package fengras.com.bitmaputils;
import android.annotation.TargetApi;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Build;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
public class MainActivity
extends AppCompatActivity {
private static String
str=
"/mnt/sdcard/c.jpg";
private static ImageView
im;
@TargetApi(Build.VERSION_CODES.
JELLY_BEAN)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.
activity_main);
im = (ImageView) findViewById(R.id.
im);
// Bitmap bitmap = BitmapFactory.decodeFile(str);
//im.setImageBitmap(bitmap);
getbitmap(
im.getMaxWidth(),
im.getMaxHeight());
}
public static Bitmap getbitmap(
int destwidth,
int desHeight) {
//第一次采样
BitmapFactory.Options options=
new BitmapFactory.Options();
//该属性设置为true时是只把图片的边框加载进来
options.
inJustDecodeBounds=
true;
//第一次只加载图片边框 不加载图片的像素
BitmapFactory.
decodeFile(
str,options);
//获得原图的宽和高
int outwidth=options.
outWidth;
int outheight=options.
outHeight;
//定义缩放比例
int sampleSize=
1;
while(outwidth/sampleSize>desHeight||outheight/sampleSize>destwidth){
sampleSize*=
2;
//如果宽高的任意一方的缩放比例没有达到要求,都继续增大缩放比例
//sampleSize应该为2的n次幂,如果给sampleSize设置的数字不是2的n次幂,那么系统会就近取值
}
//二次采样开始
options.
inJustDecodeBounds=
false;
//设置缩放比例
options.
inSampleSize=sampleSize;
options.
inPreferredConfig=Bitmap.Config.
ARGB_8888;
Bitmap bitmap = BitmapFactory.
decodeFile(
str,options);
im.setImageBitmap(bitmap);
return null;
}
}
转载请注明原文地址: https://ju.6miu.com/read-150061.html