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

Android下将图片加载到内存中,布布扣,bubuko.com

时间: 2024-08-08 13:59:14

Android下将图片加载到内存中的相关文章

iOS图片加载到内存中占用内存情况

我的测试结果: 图片占用内存   图片尺寸           .png文件大小 1MB              512*512          316KB 4MB              1024*1024      940KB 16MB            2048*2048      2.5MB 1.11MB         512*568 693KB          320*568          186KB 2.773MB       640*1136        664

Android常用的图片加载库

 Android常用的图片加载库 前言:图片加载涉及到图片的缓存.图片的处理.图片的显示等.四种常用的图片加载框架,分别是Fresco.ImageLoader. Picasso. Glide. Universal Image Loader:ImageLoader是比较老的框架,一个强大的图片加载库,包含各种各样的配置,最老牌,使用也最广泛. ImageLoader开源库存哪些特征: 1.多线程下载图片,图片可以来源于网络,文件系统,项目文件夹assets中以及drawable中等 2.支持随意的

把大图片加载进内存

把图片加载进内存,要对图片进行缩放,否则内存溢出 代码: 1 package com.example.loadimage; 2 3 import android.os.Bundle; 4 import android.app.Activity; 5 import android.graphics.Bitmap; 6 import android.graphics.BitmapFactory; 7 import android.graphics.BitmapFactory.Options; 8 i

android 浏览器对图片加载高度渲染问题

今天在开发有道汉语词典移动版的时候遇到了一个很奇怪的问题. 在android设备上访问的时候,总是发现有底部背景色不能完全渲染出来的情况(有时候又是正常的,一会儿出现一会儿不出现,iphone设备也是完全ok),就是一半是底色,还有一半没了... 仔细观察了一下发现在打开网页的时候先显示了头部的小图片和标题以及底部的按钮,再显示中间的大图,有个加载过程. ok,怀疑是图片还没加载完毕,导致高度计算出错,给底部设背景的时候加载完的那块就没颜色... 那么使用$(window).load()函数来解

把图片加载到BufferedImage中

把图片加载到BufferedImage 中有什么作用呢?它就可以利用 ImageIO.write(image, "JPEG", response.getOutputStream()); 把图片打印到客户端,或者任何一个地方. 那么如何把图片加载到BufferedImage 中呢? String imgPath = addr; BufferedImage image = ImageIO.read(new FileInputStream(imgPath));

java动态编译类文件并加载到内存中

如果你想在动态编译并加载了class后,能够用hibernate的数据访问接口以面向对象的方式来操作该class类,请参考笔者的这篇博文-(该博文暂未发布) 所谓动态编译,就是在程序运行时产生java类,并编译成class文件. 一.这里介绍两种动态编译java文件的方式. 第一种:使用Runtime执行javac命令 /** * 编译java类 * 使用Runtime执行javac命令 * @param name 类的全限定包名 不带后缀 例如com.test.Notice 而不要写成com.

【Android 进阶】图片加载框架之Glide

简介 在泰国举行的谷歌开发者论坛上,谷歌为我们介绍了一个名叫 Glide 的图片加载库,作者是bumptech.这个库被广泛的运用在google的开源项目中,包括2014年google I/O大会上发布的官方app. 特点 (1)使用简单 (2)可配置度高,自适应程度高 (3)支持常见图片格式 : Jpg png gif webp (4)支持多种数据源: 网络.本地.资源.Assets 等 (5)高效缓存策略: 支持Memory和Disk图片缓存,默认Bitmap格式采用RGB_565,内存使用

Android 强大的图片加载缓存— Glide

在图片加载库烂大街的今天,选择一个适合自己使用的图片加载库已经成为了每一个Android开发者的必经之路.现在市面上知名的图片加载库有UIL,Picasso,Volley ImageLoader,Fresco以及我们今天的主角Glide.它们各有千秋,不能评定谁一定比谁好,只能说哪一个更适合你. 我的理解 下面我来谈一下个人对这些图片加载库的理解,如有错误,还望指教. Universal Image Loader:一个强大的图片加载库,包含各种各样的配置,最老牌,使用也最广泛. Picasso:

Android的ImageLoader图片加载简单逻辑

1.以单例模式创建ImageLoader对象 2.初始化LruCache(最近最少使用算法的缓存工具类,http://www.cnblogs.com/tianzhijiexian/p/4248677.html),取可用内存的一部分用来存储图片 3.初始化DiskLruCache(硬盘缓存) 4.调用显示图片方法 如果使用资源ID,直接为ImageView设置图片 为ImageView设置tag为url Lrucache内存缓存取图片,如果有图片,设置图片,return 将图片加载请求加入图片加载