在andorid编程中,我们有时需要讲一张像素很高的图片加载的图片中,如果我们是这样去做

public void load1(View view) {String src = "mnt/sdcard/DSC.jpg";Bitmap bitmap = BitmapFactory.decodeFile(src);this.iv_img.setImageBitmap(bitmap);}

可能就是抛出 java.lang.OutOfMemoryError异常

这是由于在android系统中,默认情况下,dailvike虚拟机只会为每个应用程序分配16M的内存空间

而加载高像素的图片是非常消耗内存的,如果这时我们不将图片进行缩放就直接加载到内存,很容易就会抛出内存泄漏的异常

因此,我们可以这么来操作

public class MainActivity extends Activity {private ImageView iv_img;private int windowHeight;private int windowWidth;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);this.iv_img = (ImageView) this.findViewById(R.id.iv_img);WindowManager manager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);// 第一种获取手机屏幕宽高的方法this.windowHeight = manager.getDefaultDisplay().getHeight();this.windowWidth = manager.getDefaultDisplay().getWidth();System.out.println("手机宽 :" + this.windowWidth);System.out.println("手机高 :" + this.windowHeight);// 第二种获取手机屏幕宽高的方法,但是getSize()是从 API Level 13才有的方法// Point outSize = new Point();// manager.getDefaultDisplay().getSize(outSize );// this.windowWidth = outSize.x;// this.windowHeight = outSize.y;}public void load1(View view) {String src = "mnt/sdcard/DSC.jpg";Bitmap bitmap = BitmapFactory.decodeFile(src);this.iv_img.setImageBitmap(bitmap);}public void load2(View view) {String src = "mnt/sdcard/DSC.jpg";// 图片解析的配置Options options = new Options();// 不去真正解析图片,只是获取图片的宽高options.inJustDecodeBounds = true;BitmapFactory.decodeFile(src, options);int imageWidth = options.outWidth;int imageHeight = options.outHeight;System.out.println("图片宽 :" + imageWidth);System.out.println("图片高 :" + imageHeight);int scaleX = imageWidth / this.windowWidth;int scaleY = imageHeight / this.windowHeight;int scale = 1;if (scaleX >= scaleY && scaleX >= 1) {// 水平方向的缩放比例比竖直方向的缩放比例大,同时图片的宽要比手机屏幕要大,就按水平方向比例缩放System.out.println("按宽比例缩放");scale = scaleX;} else if (scaleY >= scaleX && scaleY >= 1) {// 竖直方向的缩放比例比水平方向的缩放比例大,同时图片的高要比手机屏幕要大,就按竖直方向比例缩放System.out.println("按高比例缩放");scale = scaleY;}System.out.println("缩放比例:" + scale);// 真正解析图片options.inJustDecodeBounds = false;// 设置采样率options.inSampleSize = scale;Bitmap bitmap = BitmapFactory.decodeFile(src,options);this.iv_img.setImageBitmap(bitmap);}}


简单的布局文件

    


进过缩放之后的图片再加载到内存,就不会再抛出异常。

更多相关文章

  1. android 不同drawable文件对应的dpi值,和所放图片分辨率
  2. 图库中选择图片出现异常Cursor为null
  3. 分享 Android(安卓)手机屏幕录制并制作成 GIF 演示图片
  4. Android给Gallery处于中间的图片加一个背景图片
  5. Android(安卓)Bitmap图片缩放优化,用canvas替代Matrix进行缩放,解
  6. Android(安卓)手绘 - 支持保存为图片
  7. Android加载大图和Lrucache 避免oom
  8. Android(安卓)textview字体颜色显示和图片显示
  9. Android-webview访问本地HTML5及本地HTML5之间的跳转

随机推荐

  1. android之【TableLayout布局】
  2. cocos2dx android mac
  3. Android 文件下载 downloadManager
  4. android 作业1相对布局(拼图)
  5. android之实现SeekBar拖动组件
  6. EditText设置不自动弹出键盘
  7. android桌面快捷方式添加 删除 更新 自动
  8. MediaScannerReceiver
  9. 2011.07.18——— android AlphaBitmap
  10. android:gravity的值可以使用|连接多个属