项目简介:

该项目为加载大图片
详细介绍:
对于超大的图片,如果不缩放的话,容易导致内存溢出。而经过处理后,无论多大的图片,都能够在手机屏幕上加载出来,不会导致内存溢出。当然,脸黑的除外
该应用涉及到的知识有:
- 1.Bitmap的使用
- 2.Android手机中加载图片的原理
有的时候,我们加载一张不足1M的图片,尽管手机的堆内存有16M,仍然会导致内存溢出,why?
这就更计算机加载图片的原理有关了:
1).手机会解析图片的所有像素信息,把每个像素信息都存入到内存中
2).Android中保存图片是用ARGB保存的,A表示阿尔法透明度,所以一个像素点占用了4个字节
例如:一张1080*720像素的24位位图图片,可能实际上经过压缩后大小只有几十K,而在android手机加载这张图片所需要的内存大小为:
1080*720*(3+1)=3110400 byte = 3037 KB = 2.9MB
实际上,图片中还包含一点其他的信息,例如图片保存的格式,使用的相机名称,以及拍摄时间等,所以总体来说要比3110400字节大一旦,大概多上几十个字节
步骤:
1.创建一个Android项目,编写布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="hhh.exercise.smultimedia_a_image.MainActivity" > <EditText android:id="@+id/ed" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:text="a.jpg" android:textColor="#00ff00" android:textSize="30sp" /> <requestFocus /> <Button android:onClick="see" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="点击*" android:textColor="#00ffff" android:textSize="30sp" /> <ImageView android:id="@+id/iv" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center" android:src="@drawable/ic_launcher" /> </LinearLayout>
界面如下所示:
2.在MainActivity中编写代码:
public class MainActivity extends Activity {
private EditText ed;
private ImageView iv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ed = (EditText) findViewById(R.id.ed);
iv = (ImageView) findViewById(R.id.iv);
}
public void see(View view) {
// 确定要加载的图片(这里为了调试方面,把所有的图片都放在SD卡中,然后在界面上输入图片的名字,根据给名字拼接字符串)
String fileName = ed.getText().toString();
String path = Environment.getExternalStorageDirectory().getPath()+ "/" + fileName;
// 该类为位图工厂(BitmapFactory)的内部类,用来封装参数对象
Options opts = new Options();
// 不为像素申请内存,只获取图片的宽、高信息
// inJustDecodeBound该字段设置为true,那么位图工厂构建BitMap对象时返回的是空值,但是会把图片的一些信息返回在Options对象中(如图片的宽、高等)
opts.inJustDecodeBounds = true;
// 第二个参数是解析图片时传入的参数,由于可能传入的参数过多,所以直接把所有参数封装成一个对象
BitmapFactory.decodeFile(path, opts);
// 获取图片的额宽高
int imgWidth = opts.outWidth;
int imgHeight = opts.outHeight;
// 获取当前手机屏幕的宽高
Display dp = getWindowManager().getDefaultDisplay();
int screenWidth = dp.getWidth();
int screenHeight = dp.getHeight();
// 设置默认缩放比为1
int scale = 1;
// 计算图片宽高与屏幕宽高比例,即计算宽缩放比,高缩放比
int scaleWidth = imgWidth / screenWidth;
int scaleHeight = imgHeight / screenHeight;
// 选择缩放比例,如果图片比屏幕小,就不进行缩放.如果图片比屏幕大,但是宽高缩放比例不同,选择缩放比大
if (scaleWidth >= scaleHeight && scaleWidth > 1) {
scale = scaleWidth;
} else if (scaleWidth < scaleHeight && scaleHeight > 1) {
scale = scaleHeight;
}
// 在Options的对象中设置缩放比例
opts.inSampleSize = scale;
// 一定要把inJustDecodeBound该字段设置为false,实际上默认值是false,
// 但是在前面的代码中已经改为了true,所以要更改过来。当然,也可以重新new 一个Option是对象
opts.inJustDecodeBounds = false;
Bitmap bm = BitmapFactory.decodeFile(path, opts);
iv.setImageBitmap(bm);
}
}
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
# android
# 加载图片
# 加载大图片
# android 大图片拖拽并缩放实现原理
# Android 实现WebView点击图片查看大图列表及图片保存功能
# Android中超大图片无法显示的问题解决
# Android高效加载大图、多图解决方案 有效避免程序OOM
# Android编程实现大图滚动显示的方法
# Android 加载大图、多图和LruCache缓存详细介绍
# Android实现网络加载图片点击大图后浏览可缩放
# Android实现大图滚动显示效果
# Android仿头条、微信大图预览视图的方法详解
# 加载
# 设置为
# 阿尔法
# 象中
# 的是
# 放在
# 就不
# 而在
# 其他的
# 这就
# 这张
# 用了
# 第二个
# 要比
# 多大
# 详细介绍
# 不为
# 所示
# 会把
# 涉及到
相关文章:
中山网站制作网页,中山新生登记系统登记流程?
建站主机选购指南与交易推荐:核心配置解析
清除minerd进程的简单方法
定制建站哪家更专业可靠?推荐榜单揭晓
如何在Tomcat中配置并部署网站项目?
C++中引用和指针有什么区别?(代码说明)
jQuery 常见小例汇总
建站之星展会模版如何一键下载生成?
大型企业网站制作流程,做网站需要注册公司吗?
安徽网站建设与外贸建站服务专业定制方案
如何用美橙互联一键搭建多站合一网站?
Thinkphp 中 distinct 的用法解析
如何通过西部建站助手安装IIS服务器?
html制作网站的步骤有哪些,iapp如何添加网页?
魔毅自助建站系统:模板定制与SEO优化一键生成指南
c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】
猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?
阿里云网站制作公司,阿里云快速搭建网站好用吗?
相册网站制作软件,图片上的网址怎么复制?
如何自定义建站之星网站的导航菜单样式?
Java解压缩zip - 解压缩多个文件或文件夹实例
如何通过多用户协作模板快速搭建高效企业网站?
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?
Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递
成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?
建站主机功能解析:服务器选择与快速搭建指南
广德云建站网站建设方案与建站流程优化指南
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
家庭建站与云服务器建站,如何选择更优?
网站制作话术技巧,网站推广做的好怎么话术?
如何在宝塔面板中创建新站点?
如何续费美橙建站之星域名及服务?
如何在万网ECS上快速搭建专属网站?
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
营销式网站制作方案,销售哪个网站招聘效果最好?
Python lxml的etree和ElementTree有什么区别
建站之星体验版:智能建站系统+响应式设计,多端适配快速建站
如何在Golang中使用encoding/gob序列化对象_存储和传输数据
建站之家VIP精选网站模板与SEO优化教程整合指南
个人摄影网站制作流程,摄影爱好者都去什么网站?
如何制作一个表白网站视频,关于勇敢表白的小标题?
深圳网站制作培训,深圳哪些招聘网站比较好?
建站之星展会模板:智能建站与自助搭建高效解决方案
微信h5制作网站有哪些,免费微信H5页面制作工具?
电脑免费海报制作网站推荐,招聘海报哪个网站多?
宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?
如何在建站主机中优化服务器配置?
常州企业网站制作公司,全国继续教育网怎么登录?
保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?
*请认真填写需求信息,我们会在24小时内与您取得联系。