zoukankan      html  css  js  c++  java
  • Android下将图片载入到内存中

           Android的系统的标准默认每一个应用程序分配的内存是16M.所以来说是很宝贵的,在创建应用的时候要尽可能的去节省内存,可是在载入一些大的文件的时候,比方图片是相当耗内存的,一个1.3M的图片,分辨率是2560X1920(宽X高)图片当载入到手机内存的时候就会请求19M的一块内存,这是远远超出了系统自带的内存空间,这时候应用程序就会挂掉,所以我们要进行图片的缩放处理,以下我就来带大家创建一个用来图片缩放的应用;

         应用效果图例如以下:

      


    核心代码的实现:

    package com.examp.loadpicture;
    
    import android.app.Activity;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.graphics.BitmapFactory.Options;
    import android.os.Bundle;
    import android.view.Display;
    import android.view.View;
    import android.view.WindowManager;
    import android.widget.ImageView;
    
    public class MainActivity extends Activity {
    	private ImageView iv;
    	private int windowHeight;
    	private int windowWidth;
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    
    		iv = (ImageView) findViewById(R.id.iv);
    
    		// 获取手机的屏幕的窗口大小
    
    		WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
    		Display display = windowManager.getDefaultDisplay();
    		windowHeight = display.getHeight();
    		windowWidth = display.getWidth();
    
    	}
    
    	public void loadPicture(View view) {
    		// 位图工厂类
    		// Bitmap bitmap = BitmapFactory.decodeFile("/sdcard/x.jpg");
    		// 将指定的文件进行编码,转化为位图
    		// iv.setImageBitmap(bitmap);
    		// 图片解析配置的类
    		Options options = new Options();
    		// 不会真的进行图片解析,仅仅是获取到图片的头信息:宽X高 日期等
    		options.inJustDecodeBounds = true;
    		// 设置图片解析类的目标文件
    		BitmapFactory.decodeFile("/sdcard/x.jpg", options);
    		// 获取图片的高X宽
    		int imageHeight = options.outHeight;
    		int imageWidth = options.outWidth;
    		System.out.println("图片的高:" + imageHeight + "图片的宽:" + imageWidth);
    
    		// 使用图片的宽高和屏幕的宽高进行计算,算出比例
    		int scaleX = imageWidth / windowWidth;
    		int scaleY = imageHeight / windowHeight;
    
    		// 缺省的比例
    		int scale = 1;
    		if (scaleX > scaleY & scaleY >= 1) {
    			scale = scaleX;
    		}
    		if (scaleY > scaleX & scaleX >= 1) {
    			scale = scaleY;
    		}
    
    		// 设置图片解析器真的去解析图片
    		options.inJustDecodeBounds = false;
    		// 设置解析的採样率,设置的值是缩放比例1/scale
    		options.inSampleSize = scale;
    		// 再次获取图片位图,并设置採样率
    		Bitmap bitmap = BitmapFactory.decodeFile("/sdcard/x.jpg", options);
    		iv.setImageBitmap(bitmap);
    
    	}
    
    }
    

    DEMO下载:

    http://download.csdn.net/detail/u011936142/7448597




  • 相关阅读:
    用最简单的例子理解装饰器模式(Decorator Pattern)
    用最简单的例子理解迭代器模式(Iterator Pattern)
    用最简单的例子理解观察者模式(Observer Pattern)
    用最简单的例子理解单例模式(Singleton Pattern)
    用最简单的例子理解对象为Null模式(Null Object Pattern)
    用最简单的例子理解策略模式(Strategy Pattern)
    使用Lazy<T>实现对客户订单的延迟加载
    C#关键字var是什么,在何种情况下使用
    C#中的IDisposable模式
    CLR基础,CLR运行过程,使用dos命令创建、编译、运行C#文件,查看IL代码
  • 原文地址:https://www.cnblogs.com/blfshiye/p/3796959.html
Copyright © 2011-2022 走看看