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 ...
随机推荐
- MyBatis 学习入门
mybatis 第一天 mybatis的基础知识 持久层的框架,对jdbc的封装 课程安排 第一天:基础知识(重点,内容量多) 最简单的jdbc程序 public class JdbcTest{ pu ...
- 弱安全协议探测工具-sslciphercheck
SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为 网络通信提供安全及数据完整性的一种安全协议.TLS ...
- Dagger 2: Step To Step
文/iamwent(简书作者)原文链接:http://www.jianshu.com/p/7505d92d7748著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 假设你已经了解 依赖注 ...
- spring junit class path resource [ /com/config/spring-core.xml] cannot be opened because it does not exist
正确写法应该如下: @RunWith(SpringJUnit4ClassRunner.class) //@ContextConfiguration(locations="classpath: ...
- windows 上rails3.2 + ruby1.9环境搭建
题外话:本文是通过参考网友资料,亲自尝试过后写的,有不对之处,还请网友指正! 1.搭建环境 准备ruby1.9.3 下载地址: 下载地址:http://rubyforge.org/frs/?group ...
- chrome的timeline的问题?
如图:Stalled.RequestSent等所表达的是什么意思呢? Stalled是浏览器得到要发出这个请求的指令,到请求可以发出的等待时间,一般是代理协商.以及等待可复用的TCP连接释放的时间,不 ...
- 如何判断 Android 应用的 Apk 签名是否一致?
可以比对apk签名的fingerprint. 假定安装了JDK,如果想查HelloWorld.apk所使用的签名的fingerprint,可以这样做: 1. 查找apk里的rsa文件 (Windows ...
- Android 实用代码七段(一)
前言 这里积累了一些不常见确又很实用的代码,每收集7条更新一次,希望能对大家有用. 声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www.cnblogs.com 农民伯伯: htt ...
- 一步步写STM32 OS【三】PendSV与堆栈操作
一.什么是PendSV PendSV是可悬起异常,如果我们把它配置最低优先级,那么如果同时有多个异常被触发,它会在其他异常执行完毕后再执行,而且任何异常都可以中断它.更详细的内容在<Cortex ...
- 找出Java进程中大量消耗CPU
原文:https://github.com/oldratlee/useful-shells useful-shells 把平时有用的手动操作做成脚本,这样可以便捷的使用. show-busy-java ...