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
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。