1. 加载大图片到内存,从gallery获取图片

android默认的最大堆栈只有16M, 图片像素太高会导致内存不足的异常,

需要将图片等比例缩小到适合手机屏幕分辨率, 再加载。

从gallery 获取图片, 即要获取另一个activity的返回值。

示例代码:

public class MainActivity extends Activity {
private ImageView iv;
private WindowManager wm; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
wm = getWindowManager();
iv = (ImageView) findViewById(R.id.iv);
} // 从系统的图库里面 获取一张照片
public void click(View view) {
Intent intent = new Intent();
intent.setAction("android.intent.action.PICK");
intent.addCategory("android.intent.category.DEFAULT");
intent.setType("image/*");
startActivityForResult(intent, 0);
} @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (data != null) {
// 获取到系统图库返回回来图片的uri
Uri uri = data.getData();
System.out.println(uri.toString()); try {
InputStream is = getContentResolver().openInputStream(uri);
// 1.计算出来屏幕的宽高.
int windowWidth = wm.getDefaultDisplay().getWidth();
int windowHeight = wm.getDefaultDisplay().getHeight();
//2. 计算图片的宽高.
// 2.计算出来图片的宽高.
BitmapFactory.Options opts = new Options();
// 设置 不去真正的解析位图 不把他加载到内存 只是获取这个图片的宽高信息
opts.inJustDecodeBounds = true;
BitmapFactory.decodeStream(is, null, opts);
int bitmapHeight = opts.outHeight;
int bitmapWidth = opts.outWidth; if (bitmapHeight > windowHeight || bitmapWidth > windowWidth) {
int scaleX = bitmapWidth/windowWidth;
int scaleY = bitmapHeight/windowHeight;
if(scaleX>scaleY){//按照水平方向的比例缩放
opts.inSampleSize = scaleX;
}else{//按照竖直方向的比例缩放
opts.inSampleSize = scaleY;
} }else{//如果图片比手机屏幕小 不去缩放了.
opts.inSampleSize = 1;
}
//让位图工厂真正的去解析图片
opts.inJustDecodeBounds = false;
//注意: 流的操作
is = getContentResolver().openInputStream(uri);
Bitmap bitmap = BitmapFactory.decodeStream(is, null, opts);
iv.setImageBitmap(bitmap);
} catch (Exception e) {
e.printStackTrace();
}
}
super.onActivityResult(requestCode, resultCode, data);
} }

2. 获取图片exif信息

示例代码:图片的所有描述信息都放在头部分,不仅可以读 还可以写入

public void click(View view) {
try {
ExifInterface exifInfo = new ExifInterface(
"/sdcard/DCIM/Camera/IMG_20121103_202628.jpg");
String width = exifInfo.getAttribute(ExifInterface.TAG_IMAGE_WIDTH);
String length = exifInfo
.getAttribute(ExifInterface.TAG_IMAGE_LENGTH);
System.out.println(width);
System.out.println(length); // 更改图片的exif 信息.
// exifInfo.setAttribute(tag, value); } catch (Exception e) {
e.printStackTrace();
} }

Android -- 加载大图片到内存,从gallery获取图片,获取图片exif信息的更多相关文章

  1. Android学习笔记_51_转android 加载大图片防止内存溢出

    首先来还原一下堆内存溢出的错误.首先在SD卡上放一张照片,分辨率为(3776 X 2520),大小为3.88MB,是我自己用相机拍的一张照片.应用的布局很简单,一个Button一个ImageView, ...

  2. Android 加载大图片到内存

    本文演示android中图片加载到内存 首先设计界面: 代码如下: <LinearLayout xmlns:android="http://schemas.android.com/ap ...

  3. Android加载大图片OOM异常解决

      尽量不要使用setImageBitmap或setImageResource或BitmapFactory.decodeResource来设置一张大图, 因为这些函数在完成decode后,最终都是通过 ...

  4. android 加载大图片

    引用:http://my.eoe.cn/littlebirds/archive/4646.html 尽量不要使用setImageBitmap或setImageResource或BitmapFactor ...

  5. Android -- 加载大图片的方法

    在android中要加载一张大图片到内存中如果通过如下方式进行: Bitmap bitmap= BitmapFactory.decodeFile("/sdcard/a.jpg"); ...

  6. Android加载大图片实例详解

    摘要:在Android下采用ARGB表示颜色,每个像素占四个字节.其加载图片申请空间时与图片的实际大小没有关系,与像素有关系.

  7. android加载大图片到内存

    1)演示效果: 1)代码演示: 布局代码: 权限配置:

  8. Android(java)学习笔记236:多媒体之加载大图片到内存(Bitmap API)

    1.Bitmap (API使用) android里面的bitmap中,一个像素点需要4个byte去表示,这是因为android表示颜色是" argb ":其中 a 表示是透明度,然 ...

  9. Android开发中如何解决加载大图片时内存溢出的问题

    Android开发中如何解决加载大图片时内存溢出的问题    在Android开发过程中,我们经常会遇到加载的图片过大导致内存溢出的问题,其实类似这样的问题已经屡见不鲜了,下面将一些好的解决方案分享给 ...

随机推荐

  1. C#IIS网站应用程序池启动回收停止 .

    //添加应用程序池空间引用using System.DirectoryServices;using System.Text; using System.Text.RegularExpressions; ...

  2. 微信小程序 --- 事件绑定

    事件类别: tap:点击事件: longtap:长按事件: touchstart:触摸开始: touchend:触摸结束: touchcansce:取消触摸: 事件绑定: bind绑定: catch绑 ...

  3. 310实验室OTL问题(2)

    1.PyOptimization代码学习心得 (1).该部分由三个分块组成(按完成的相应的任务).第一部分,运行函数. 以optimization.py为入口程序,其思路是:首先获取路径,然后,初始化 ...

  4. 微信开发(3):微信公众号发现金红包功能开发,利用第三方SDK实现(转)

    最近需求是 用户兑换微信红包,需要一些验证,加密,以及证书: 工欲善其事必先利其器 感谢前辈的微信SDK 已经维护三年了,还在维护中! 官方文档走一波 文档还是一如既往的 坑人啊,写的很简单,对简单明 ...

  5. __FILE__ 与 $_SERVER['SCRIPT_FILENAME']的区别

    二者都表明了本文件的绝对路径,区别在于,$_SERVER['SCRIPT_FILENAME']指向当前执行脚本的绝对路径:__FILE__指向当前文件的绝对路径:也就是写在哪个文件里就是哪里. 例子: ...

  6. 02Del.ashx(删除班级)

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using WebHelper ...

  7. 公民身份号码校验码算法(C#版)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  8. 使用jquery的$.post()时浏览器崩溃

    代码: function verifyStepOne() { var phoneNumber = $("#phoneNumber"); var username = $(" ...

  9. CentOS安装Nginx-1.6.2+安全配置+性能配置

    注:以下所有操作均在CentOS 6.5 x86_64位系统下完成. #准备工作# 在安装Nginx之前,请确保已经使用yum安装了pcre等基础组件,具体见<CentOS安装LNMP环境的基础 ...

  10. Http协议中Cookie详细介绍(转)

    原文:http://www.169it.com/article/3217120921.html Cookie总是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie.内存C ...