概述
图片过大会直接导致内存溢出,所以一般加载之前要先处理一下。
1.通过窗体管理器WindowManager得到屏幕的宽高信息
2.通过图片头文件信息Options得到图片的宽高。
3.计算缩放比例
4.缩放加载真实图片Bitmap到内存
package com.itheima.loadimg;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.BitmapFactory.Options;
import android.os.Bundle;
import android.view.View;
import android.view.WindowManager;
import android.widget.ImageView;
public class MainActivity extends Activity {
private ImageView iv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv = (ImageView) findViewById(R.id.iv);
}
public void click(View view){
//相当消耗内存资源 根据图片的分辨率而定
//不能直接加载图片,要对图片进行缩放
//手机屏幕本来就小,不需要大像素的的图片,所以可以直接缩放
// Bitmap bitmap = BitmapFactory.decodeFile("/mnt/sdcard/photo.jpg");
// iv.setImageBitmap(bitmap);
//1.通过窗体管理器得到屏幕的宽高信息
WindowManager wm = getWindowManager();
//虽然这个方法过时了,但是还是用这个,新的方法在新版本才有,不能兼容2.3
int screenWidth = wm.getDefaultDisplay().getWidth();
int screenHeight = wm.getDefaultDisplay().getHeight();
System.out.println("屏幕宽高:"+screenWidth+"-"+screenHeight);
//2.得到图片的宽高。
//这里不像上面那样加载图片,防止奔溃
//只加载头文件信息(就是鼠标移动到图片显示出来的信息),api和上面的是不一样的
BitmapFactory.Options opts = new Options();//解析位图的附加条件
opts.inJustDecodeBounds = true;//不去解析真实的位图,只是获取这个位图的头文件信息
Bitmap bitmap = BitmapFactory.decodeFile("/mnt/sdcard/photo.jpg", opts);
int bitmapWidth = opts.outWidth;
int bitmapHeight = opts.outHeight;
System.out.println("图片宽高: "+bitmapWidth+"-"+bitmapHeight);
//3.计算缩放比例
int dx = bitmapWidth/screenWidth;
int dy = bitmapHeight/screenHeight;
int scale = 1;
//dy>1 是在指明图片像素比手机屏幕还小的情况下就不能缩比例了
if(dx>dy&&dy>1){
System.out.println("按照水平方法缩放,缩放比例:"+dx);
scale = dx;
}
if(dy>dx&&dx>1){
System.out.println("按照垂直方法缩放,缩放比例:"+dy);
scale = dy;
}
//4.缩放加载图片到内存。
opts.inSampleSize = scale;
opts.inJustDecodeBounds = false;//真正的去解析这个位图。
bitmap = BitmapFactory.decodeFile("/mnt/sdcard/photo.jpg", opts);
iv.setImageBitmap(bitmap);
}
}
转载于:https://my.oschina.net/u/2356176/blog/420806
最后
以上就是等待热狗为你收集整理的加载图片到内存中的全部内容,希望文章能够帮你解决加载图片到内存中所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复