android95 缩放加载大图片
MainActivity:
package com.itheima.loadimage; import android.os.Bundle;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.BitmapFactory.Options;
import android.graphics.Point;
import android.view.Display;
import android.view.Menu;
import android.view.View;
import android.widget.ImageView; public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
/*#加载大图片
* 计算机把图片所有像素信息全部解析出来,保存至内存,会内存溢出,因此要缩放。
* Android保存图片像素信息,是用ARGB保存
* 手机屏幕320*480,总像素:153600
* 图片宽高2400*3200,总像素7680000
图片的总像素大于屏幕的总像素,因此要对图片进行缩放,否则内存会溢出。
* 2400 / 320 = 7,宽缩放比例
* 3200 / 480 = 6,高的缩放比例
图片的宽和高的缩放比例要一样,选择大的作为缩放比例。*/ public void click(View v){
//解析图片时需要使用到的参数都封装在这个对象里了
Options opt = new Options();
//不返回图片不加载图片到内存只获取图片宽高,避免了内存溢出。
opt.inJustDecodeBounds = true;
BitmapFactory.decodeFile("sdcard/dog.jpg", opt);//该方法返回null
//拿到图片宽高
int imageWidth = opt.outWidth;
int imageHeight = opt.outHeight; Display dp = getWindowManager().getDefaultDisplay();
//拿到屏幕宽高
int screenWidth = dp.getWidth();
int screenHeight = dp.getHeight(); //计算缩放比例
int scale = 1;
int scaleWidth = imageWidth / screenWidth;//图片的宽除以屏幕的宽
int scaleHeight = imageHeight / screenHeight;//图片的高除以屏幕的高
if(scaleWidth >= scaleHeight && scaleWidth >= 1){
scale = scaleWidth;//缩放比例哪个大用哪个
}
else if(scaleWidth < scaleHeight && scaleHeight >= 1){
scale = scaleHeight;
} //设置缩放比例
opt.inSampleSize = scale;
opt.inJustDecodeBounds = false;//设置false就会去加载图片到内存而不是仅仅加载图片的信息,
Bitmap bm = BitmapFactory.decodeFile("sdcard/dog.jpg", opt);//bm就是缩放之后的图片 ImageView iv = (ImageView) findViewById(R.id.iv);
iv.setImageBitmap(bm);
} }
#多媒体概念
* 文字、图片、音频、视频
#计算机图片大小的计算
> 图片大小 = 图片的总像素 * 每个像素占用的大小 * 单色图:每个像素表示一种颜色,则用1位就可以表示0-1,则每个像素占用1/8个字节,图片大小等于图片的像素数乘以每个像素的大小。
* 16色图:每个像素有16种颜色,则用4位0000-1111就可以表示了,即占用4位,一个字节有8位,则每个像素占用1/2个字节,图片大小等于图片的像素数乘以每个像素的大小。
* 256色图:每个像素有256种颜色,则用8位就可以表示了00000000-11111111,每个像素占用1个字节,图片大小等于图片的像素数乘以每个像素的大小。
* 24位图:每个像素占用24位则3个字节,图片大小等于图片的像素数乘以每个像素的大小。
android95 缩放加载大图片的更多相关文章
- 图片_ _Android有效解决加载大图片时内存溢出的问题 2
Android有效解决加载大图片时内存溢出的问题 博客分类: Android Android游戏虚拟机算法JNI 尽量不要使用setImageBitmap或 setImageResource或 Bit ...
- Android(java)学习笔记236:多媒体之加载大图片到内存(Bitmap API)
1.Bitmap (API使用) android里面的bitmap中,一个像素点需要4个byte去表示,这是因为android表示颜色是" argb ":其中 a 表示是透明度,然 ...
- Android开发中如何解决加载大图片时内存溢出的问题
Android开发中如何解决加载大图片时内存溢出的问题 在Android开发过程中,我们经常会遇到加载的图片过大导致内存溢出的问题,其实类似这样的问题已经屡见不鲜了,下面将一些好的解决方案分享给 ...
- Android简易实战教程--第二十八话《加载大图片》
Android系统以ARGB表示每个像素,所以每个像素占用4个字节,很容易内存溢出.假设手机内存比较小,而要去加载一张像素很高的图片的时候,就会因为内存不足导致崩溃.这种异常是无法捕获的 内存不足并不 ...
- Android -- 加载大图片到内存,从gallery获取图片,获取图片exif信息
1. 加载大图片到内存,从gallery获取图片 android默认的最大堆栈只有16M, 图片像素太高会导致内存不足的异常, 需要将图片等比例缩小到适合手机屏幕分辨率, 再加载. 从gallery ...
- Android(java)学习笔记179:多媒体之加载大图片到内存(Bitmap API)
1. Bitmap (API使用) android里面的bitmap中,一个像素点需要4个byte去表示,这是因为android表示颜色是" argb ":其中 a 表示是透明度, ...
- Android Camera开发系列(上)——Camera的基本调用与实现拍照功能以及获取拍照图片加载大图片
Android Camera开发系列(上)--Camera的基本调用与实现拍照功能以及获取拍照图片加载大图片 最近也是在搞个破相机,兼容性那叫一个不忍直视啊,于是自己翻阅了一些基本的资料,自己实现了一 ...
- Android学习笔记_51_转android 加载大图片防止内存溢出
首先来还原一下堆内存溢出的错误.首先在SD卡上放一张照片,分辨率为(3776 X 2520),大小为3.88MB,是我自己用相机拍的一张照片.应用的布局很简单,一个Button一个ImageView, ...
- 【Android Developers Training】 56. 更效率地加载大图片
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
随机推荐
- lunux下查看文件文件夹大小的命令
使用ls -lht命令显示当前目录下的所有文件,其中有一列就是显示这个文件的大小.如果要看一个文件夹的大小,可以用du -sh *
- bzoj2208
首先有向图的题目不难想到先tarjan缩点 一个强连通分量中的点的连通数显然是相等: 据说这样直接dfs就可以过了,但显然不够精益求精 万一给定的是一个完全的DAG图怎么办,dfs铁定超时: 首先想, ...
- Mater Nginx(2) - A Configuration Guide
The basic configuration format Nginx global configuration parameters Using include files The HTTP se ...
- rfc all download
http://www.rfc-editor.org/download.html about RTSP http://en.wikipedia.org/wiki/Real_Time_Streaming_ ...
- SQL Server 2008空间数据应用系列九:使用空间工具(Spatial Tools)导入ESRI格式地图数据
转自:http://www.cnblogs.com/beniao/archive/2011/03/22/1989310.html 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Micros ...
- zookeeper 客户端编程
zookeeper是一个分布式的开源的分布式协调服务,用它可以来现同步服务,配置维护.zookeeper的稳定性也是可以保证的,笔者曾参与过的使用zookeeper的两个应用,一个是用zookeepe ...
- spring--注解注入--12
12.1 概述 12.1.1 什么是零配置 在SSH集成一章中大家注意到项目结构和包结构是不是很有规律,类库放到WEB-INF/lib文件夹下,jsp文件放到WEB-INF/jsp文件夹下,web ...
- HDU 2817 A sequence of numbers
http://acm.hdu.edu.cn/showproblem.php?pid=2817 __int64 pow_mod (__int64 a, __int64 n, __int64 m)快速幂取 ...
- [转]ASP.NET MVC 入门9、Action Filter 与 内置的Filter实现(介绍)
有时候你想在调用action方法之前或者action方法之后处理一些逻辑,为了支持这个,ASP.NET MVC允许你创建action过滤器.Action过滤器是自定义的Attributes,用来标记添 ...
- Django学习随想(1)
关于Django的模型部分: 模型操作实际上都是针对数据库的一系列操作. Django封装了底层的操作,给用户提供了一组非常python化的模型对象.让python开发者可以很方便.直观地进行数据库表 ...