图片所示手机里的图片怎么做

Android加载大分辨率图片到手机内存中的实例方法
字体:[ ] 类型:转载 时间:
有些图片的分辨率比较高,把它直接加载到手机内存中之后,会导致堆内存溢出的问题,下面就讲解一下Android的堆内存以及如何在Android应用中加载一个高分辨率的图片的方法
还原堆内存溢出的错误首先来还原一下堆内存溢出的错误。首先在SD卡上放一张照片,分辨率为(3776 X 2520),大小为3.88MB,是我自己用相机拍的一张照片。应用的布局很简单,一个Button一个ImageView,然后按照常规的方式,使用BitmapFactory加载一张照片并使用一个ImageView展示。代码如下:
代码如下:btn_loadimage.setOnClickListener(new View.OnClickListener() {&&&&&&&&&&& @Override&&&&&&&&&&& public void onClick(View v) {&&&&&&&&&&&&&&& Bitmap bitmap=BitmapFactory.decodeFile("/sdcard/a.jpg");&&&&&&&&&&&&&&& iv_bigimage.setImageBitmap(bitmap);&&&&&&&&&&& }}
当点击按钮后,程序会报错,查看日志为:
先来分析一下这个错误,首先dalvikvm(Android虚拟机)发现需要的内存38MB大于应用的堆内存24MB,这个时候尝试使用软加载的方式加载数据,我们知道当内存不足的时候dalvikvm会自动进行GC(Garbage Collection),大概清理了55k的空间出来,耗时203毫秒,但是内存还是不够,所以最后发生堆内存溢出的错误。分析堆内存溢出Android系统主要用于低能耗的移动设备,所以对内存的管理有很多限制,一个应用程序,Android系统缺省会为其分配最大16MB(某些机型是24MB)的空间作为堆内存空间,我这里使用的模拟器调试的,这个模拟器被设定为24MB,可以在Android Virtual Device Manager中查看到。
而这里的图片明明只有3.88MB,远远小于Android为应用分配的堆内存,而加载到内存中,为什么需要消耗大约38MB的内存呢?我们都知道,图片是由一个一个点分布组成的(分辨率),通常加载这类数据都会在内存中创建一个二维数组,数组中的每一项代表一个点,而这个图片的分辨率是3776 * 2520,每一点又是由ARGB色组成,每个色素占4个Byte,所以这张图片加载到内存中需要消耗的内存为:3776 * 2520 * 4byte = byte大约需要38MB的内存才能正确加载这张图片,这就是上面错误描述需要38MB的内存空间,大小略有出入,因为图片还有一些Exif信息需要存储,会比仅靠分辨率计算要大一些。如何加载大分辨率图片有时候我们确实会需要加载一些大分辨率的图片,但是对于移动设备而言,哪怕加载能成功那么大的内存也是一种浪费(屏幕分辨率限制),所以就需要想办法把图片按照一定比率压缩,使分辨率降低,以至于又不需要耗费很大的堆内存空间,又可以最大的利用设备屏幕的分辨率来显示图片。这里就用到一个BitmapFactory.Options对象,下面来介绍它。BitmapFactory.Options为BitmapFactory的一个内部类,它主要用于设定与存储BitmapFactory加载图片的一些信息。下面是Options中需要用到的属性:inJustDecodeBounds:如果设置为true,将不把图片的像素数组加载到内存中,仅加载一些额外的数据到Options中。outHeight:图片的高度。outWidth:图片的宽度。inSampleSize:如果设置,图片将依据此采样率进行加载,不能设置为小于1的数。例如设置为4,分辨率宽和高将为原来的1/4,这个时候整体所占内存将是原来的1/16。
示例Demo下面通过一个简单的Demo来演示上面提到的内容,代码中注释比较清晰,这里就不再累述了。
代码如下:package cn.bgxt.
import android.os.Bimport android.os.Eimport android.app.Aimport android.graphics.Bimport android.graphics.BitmapFimport android.graphics.BitmapFactory.Oimport android.view.Mimport android.view.Vimport android.view.WindowMimport android.widget.Bimport android.widget.ImageV
public class MainActivity extends Activity {&&& private Button btn_&&& private ImageView iv_
&&& @Override&&& protected void onCreate(Bundle savedInstanceState) {&&&&&&& super.onCreate(savedInstanceState);&&&&&&& setContentView(R.layout.activity_main);
&&&&&&& btn_loadimage = (Button) findViewById(R.id.btn_loadimage);&&&&&&& iv_bigimage = (ImageView) findViewById(R.id.iv_bigimage);
&&&&&&& btn_loadimage.setOnClickListener(new View.OnClickListener() {
&&&&&&&&&&& @Override&&&&&&&&&&& public void onClick(View v) {&&&&&&&&&&&&&&& // Bitmap bitmap=BitmapFactory.decodeFile("/sdcard/a.jpg");&&&&&&&&&&&&&&& // iv_bigimage.setImageBitmap(bitmap);
&&&&&&&&&&&&&&& BitmapFactory.Options opts = new Options();&&&&&&&&&&&&&&& // 不读取像素数组到内存中,仅读取图片的信息&&&&&&&&&&&&&&& opts.inJustDecodeBounds =&&&&&&&&&&&&&&& BitmapFactory.decodeFile("/sdcard/a.jpg", opts);&&&&&&&&&&&&&&& // 从Options中获取图片的分辨率&&&&&&&&&&&&&&& int imageHeight = opts.outH&&&&&&&&&&&&&&& int imageWidth = opts.outW
&&&&&&&&&&&&&&& // 获取Android屏幕的服务&&&&&&&&&&&&&&& WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);&&&&&&&&&&&&&&& // 获取屏幕的分辨率,getHeight()、getWidth已经被废弃掉了&&&&&&&&&&&&&&& // 应该使用getSize(),但是这里为了向下兼容所以依然使用它们&&&&&&&&&&&&&&& int windowHeight = wm.getDefaultDisplay().getHeight();&&&&&&&&&&&&&&& int windowWidth = wm.getDefaultDisplay().getWidth();
&&&&&&&&&&&&&&& // 计算采样率&&&&&&&&&&&&&&& int scaleX = imageWidth / windowW&&&&&&&&&&&&&&& int scaleY = imageHeight / windowH&&&&&&&&&&&&&&& int scale = 1;&&&&&&&&&&&&&&& // 采样率依照最大的方向为准&&&&&&&&&&&&&&& if (scaleX & scaleY && scaleY &= 1) {&&&&&&&&&&&&&&&&&&& scale = scaleX;&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&& if (scaleX & scaleY && scaleX &= 1) {&&&&&&&&&&&&&&&&&&& scale = scaleY;&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&& // false表示读取图片像素数组到内存中,依照设定的采样率&&&&&&&&&&&&&&& opts.inJustDecodeBounds =&&&&&&&&&&&&&&& // 采样率&&&&&&&&&&&&&&& opts.inSampleSize =&&&&&&&&&&&&&&& Bitmap bitmap = BitmapFactory.decodeFile("/sdcard/a.jpg", opts);&&&&&&&&&&&&&&& iv_bigimage.setImageBitmap(bitmap);
&&&&&&&&&&& }&&&&&&& });&&& }}&
效果展示:
总结这里讲解了如何加载一个大分辨率的图片到内存中并使用它。不过一般好一点的图片处理软件,都会有图片放大功能,如果仅做此处理,单纯的把处理后的图片放大,会影响显示效果,图片还原度不高。一般会重新获取放大区域的图片的分辨率像素数组,然后重新处理加载到内存中进行显示。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具查看: 20748|回复: 89
UID355923精华0帖子最后登录注册时间
& && & 近日来发现论坛上不少鱼友使用手机发布的帖子都未能成功上传图片,因此将用手机浏览论坛上传图片的步骤一一列出,以便成功上传图片,请大家跟随我一起体验下手机浏览论坛超轻松“上传图片”吧!
& && & 通过手机上传图片时(手机拍的图片像素较高),但图片不宜过大,图片的大小还需保持在2M以内,同时宽和高不得超过.如需对图片进行裁剪,大家可以通过QQ进行截图,在相册中选择了自己想要上传的图片后,图片最下方即可出现“预览”、“编辑”、“高清”三个选项,大家选择编辑之后就可以看以“裁剪和旋转”,按此选择即可进行图片裁剪:
手机APP客户端上传图片的步骤:
1 点击红色区域中的的“+”按钮即可出现“发帖”,如图所示:
2 点击“发帖”即可选择发帖版块,如图所示:
<font color="#. 选择版块之后,会出现“发布帖子”,然后在“添加标题”和“发布内容”框中添加内容即可,如图所示:
4. 接着点击左下方的“图片”标志,”然后选择要上传的图片后轻点确定键,即可成功上传图片,如果图片过大,记得用QQ截图裁剪
手机电脑版上传图片的步骤:
1 通过手机浏览器进入论坛
2 手机浏览器登陆论坛后,一直将屏幕往下拉,会出现“触屏版”“电脑版”“客户端”,选择“电脑版”进入论坛:
3 进入论坛选择版块后,点击“发表主题”开始发布主题帖:
4 点击“图片”开始上传图片:
<font color="# 点击“图片”后,此时需将页面缩放,随即会看见出现“选择文件上传”按钮:
6 点击“选择文件上传”按钮,选择要上传的所有图片开始一起上传:
手机触屏版上传图片的步骤:
1 通过手机浏览器进入论坛:
2 手机浏览器登陆论坛后,一直将屏幕往下拉,会出现“触屏版”“电脑版”“客户端”,选择“触屏版”进入论坛:
<font color="# 点击“发帖”选择发帖的版块即可发布主题帖:
<font color="#.点击图片旁边的“+”号就可以到自己的图片库选择要上传的图片:
6 当页面成这样时,即表示上传图片成功,如下图所示:
有此方面需求的鱼友,大家可以一试,轻轻一点,方便快捷成功上传图片!
本帖子中包含更多资源
才可以下载或查看,没有帐号?
扫描二维码,手机浏览分享本帖。
UID221719精华6帖子最后登录注册时间
此等级代表知识和贡献
当前:状元(8级)
项&&目当前下级
主题数:419-
回复数:62512-
精华数:6+2
回答数:9270-
采纳数:822-
热帖数:41+9
本帖子中包含更多资源
才可以下载或查看,没有帐号?
每点赞两次可获得1龙币
UID603847精华1帖子最后登录注册时间
此等级代表知识和贡献
当前:探花(6级)
项&&目当前下级
主题数:63-
回复数:8484-
精华数:1+2
回答数:1447-
采纳数:128-
热帖数:21-
本帖子中包含更多资源
才可以下载或查看,没有帐号?
每点赞两次可获得1龙币
UID587684精华0帖子最后登录注册时间
此等级代表知识和贡献
当前:贡士(4级)
项&&目当前下级
主题数:130-
回复数:24974-
回答数:6746-
采纳数:445-
热帖数:1+2
本帖子中包含更多资源
才可以下载或查看,没有帐号?
每点赞两次可获得1龙币
UID680887精华0帖子最后登录注册时间
此等级代表知识和贡献
当前:举人(3级)
项&&目当前下级
主题数:32-
回复数:484-
回答数:25+25
热帖数:0+1
此等级代表活跃度
当前:鱼圣(6级)
鱼圣(6级), 积分 1455, 距离下一级还需 1545 积分
哈哈,这个好,躺着趴着都能发帖了
本帖子中包含更多资源
才可以下载或查看,没有帐号?
每点赞两次可获得1龙币
UID690933精华0帖子最后登录注册时间
此等级代表知识和贡献
当前:举人(3级)
项&&目当前下级
回复数:421-
回答数:70-
热帖数:0+1
此等级代表活跃度
当前:鱼圣(6级)
鱼圣(6级), 积分 1263, 距离下一级还需 1737 积分
学习了,谢谢!
本帖子中包含更多资源
才可以下载或查看,没有帐号?
每点赞两次可获得1龙币
UID62162精华10帖子最后登录注册时间
此等级代表知识和贡献
当前:榜眼(7级)
项&&目当前下级
主题数:163-
回复数:4956-
精华数:10-
回答数:1069-
采纳数:49+1
热帖数:41-
支持管家哦
本帖子中包含更多资源
才可以下载或查看,没有帐号?
每点赞两次可获得1龙币
UID541341精华0帖子最后登录注册时间
此等级代表知识和贡献
当前:进士(5级)
项&&目当前下级
主题数:135-
回复数:19144-
精华数:0+1
回答数:3034-
采纳数:47-
热帖数:3+3
本帖子中包含更多资源
才可以下载或查看,没有帐号?
每点赞两次可获得1龙币
UID326026精华0帖子最后登录注册时间
此等级代表知识和贡献
当前:举人(3级)
项&&目当前下级
主题数:23-
回复数:1430-
回答数:70-
热帖数:0+1
此等级代表活跃度
当前:鱼祖(7级)
鱼祖(7级), 积分 4290, 距离下一级还需 3710 积分
谢谢啊!!
本帖子中包含更多资源
才可以下载或查看,没有帐号?
每点赞两次可获得1龙币
UID636101精华0帖子最后登录注册时间
此等级代表知识和贡献
当前:童生(1级)
项&&目当前下级
主题数:0+1
回复数:597-
回答数:99-
此等级代表活跃度
当前:鱼圣(6级)
鱼圣(6级), 积分 1791, 距离下一级还需 1209 积分
谢谢分享,学习了
本帖子中包含更多资源
才可以下载或查看,没有帐号?
&了解了。&
每点赞两次可获得1龙币
2017金鸡勋章
2017金鸡勋章
[新人贡献]荣勋
成功推荐1位以上朋友注册成为龙鱼家族成员,并发贴大于1,或者您的发帖量大于50并且在线时长超过20小时即可获得!
[龙族新人]荣勋
只要注册用户在线时间超过1小时,发贴超过2贴以上即可申请!
2017元宵节勋章
2017元宵节勋章
一周岁纪念章
一周岁纪念章
二周岁纪念章
二周岁纪念章
金猴纳福勋章
金猴纳福勋章
小红花勋章
小红花勋章
2016中秋节勋章
2016中秋节勋章
参加鱼邻内测活动
[终身成就]荣勋
谢谢您为社区发展做出的不可磨灭的贡献!
[风雨同舟]荣勋
从社区的建立到低潮到兴起都一直不曾离开过,默默支持社区的发展才可以获得此勋章!一般为社区元老级人物!此奖在3个月内不颁发.
[宣传大使]荣勋
谢谢您为社区积极宣传,特颁发此勋章!
[原创精英]荣勋
热衷于积极分享自己的真实体验和心得,并得到版主及管理认可,即可申请获得!
[爱心使者]荣勋
助人为乐,帮助社区的朋友排疑解难!并获得帮助过会员特别说明感谢的特颁发此勋章!
参加龙巅寻宝活动
双12活动勋章
参加龙鱼之巅“爸爸去哪”活动
混养之美晋级勋章
参加混养之美比赛并成功晋级,此勋章不可与其他混养勋章同时显示
马上有鱼勋章
愚人节勋章
愚人节勋章
APP宣传使者
APP宣传使者
观赏鱼NO.1
参加论坛手机版客户端测试,并反馈信息可获得此勋章
改编达人勋章
改编达人勋章
电子眼勋章
电子眼勋章
乐于助人勋章
乐于助人勋章
拼图大师勋章
拼图大师勋章
圣诞节最终勋章
爱鱼爱她两相顾
爱鱼爱她两相顾
活动参与勋章
活动参与勋章
参加之巅传媒“捕分大行动”活动,并申请且获得积分最高的50
龙巅商城宣传大使勋章
龙巅商城宣传大使勋章
宣传使者勋章
宣传使者勋章
踩楼王勋章
踩楼王勋章
国庆幸运星勋章
国庆幸运星勋章
特别的爱给特别的你 5.20
特别的爱给特别的你 5.20
六周岁纪念章
六周岁纪念章
龙巅萌宝勋章
龙巅萌宝勋章
全勤奖勋章
全勤奖勋章
龙巅活跃会员
龙巅活跃会员
才智过人勋章
才智过人勋章
家乡版块建设
家乡版块建设
龙巅好学生
龙巅好学生
龙巅混养之师
龙巅混养之师
龙巅小苹果勋章
健康小卫士
七彩年度活跃会员
七彩年度活跃会员
虎团专属勋章
虎团专属勋章
中秋节勋章
龙巅混养新星
龙巅混养新星
龙巅混养达人
龙巅混养达人
龙巅混养高手
龙巅混养高手
大龄儿童勋章
大龄儿童勋章
2016端午节勋章
2016端午节勋章
龙巅最佳写手
龙巅最佳写手
好爸爸勋章
好爸爸勋章
悬赏问答之星专属永久勋章
悬赏问答之星专属永久勋章
三周岁纪念章
三周岁纪念章
四周岁纪念章
四周岁纪念章
五周岁纪念章
五周岁纪念章
热心论坛勋章
热心论坛勋章
奥运助力勋章
奥运助力勋章
龙巅雅安爱心
龙巅雅安爱心
2013家乡版块贡献勋章
2013家乡版块贡献勋章
知识小能手
知识小能手
龙巅七夕纪念章
龙巅七夕纪念章
龙巅精英团员
龙巅精英团员
家乡版块贡献
家乡版块贡献
聚会纪念章
聚会纪念章
混养之美评委勋章
龙巅混养之美比赛评委勋章,此勋章不可与其他混养勋章同时显示
特供勋章1.gif
特供勋章1.gif
母亲节.gif
母亲节.gif
金色纸飞机勋章
金色纸飞机勋章
粽情粽意勋章
粽情粽意勋章
吐槽——我最摇摆.gif
吐槽——我最摇摆.gif
混养之美纪念勋章
成功参加混养之美比赛并且帖子符合参赛帖要求即可获得此勋章,此勋章不可与其他混养勋章同时显示
鱼趣优选平台端午节勋章
鱼趣优选平台端午节勋章
龙巅商城春节福到
龙巅商城春节福到
龙巅微信公众号
龙巅官方群:「佬河手摄」一个手机软件,4个简单步骤做出超美夕阳照片
「佬河手摄」一个手机软件,4个简单步骤做出超美夕阳照片
查言英讲生活
佬河手摄系列——普通照片做成夕阳照片,只用一个手机软件就能轻松完成,接下来进入正题。首先选择一张照片,下载手机修图软件snapseed,图标为一片绿叶(没有任何广告成分,纯属被该软件功能和体验征服)。将要修的照片导入软件1.点击右下角画笔状的按钮会跳出菜单,我们首先调节白平衡。根据图片需要调节,举例中调节色温+30,色差+40。调节后如上图2.调节晕影双指收缩,将范围缩小缩小到最小将晕影外部亮度和内部亮度分别调节到需要值,样本中调节为+50调节完晕影后效果如上图3.调节局部效果(包括局部亮度、对比度、饱和度等)点击局部,将圆标移动到需要调节的的位置,这里我们将其移动到需要调节的光照部位,并只调节饱和度+50。调节完局部后的效果图如上4.接下来是最后一步曲线调节(这个曲线调节为画面色彩曲线)调节到如图中所示,可以看到整个画面变暗了不少,得到了我们想要的傍晚时分的景象。这样,一张夕阳的照片就完成了,全部只需4个步骤,是不是很简单呢,看看照片前后对比。赶紧自己做一张试试吧。更多手机摄影资讯分享,关注佬河
本文仅代表作者观点,不代表百度立场。系作者授权百家号发表,未经许可不得转载。
查言英讲生活
百家号 最近更新:
简介: 发布关于生活的事情,希望大家关注
作者最新文章}

我要回帖

更多关于 正如图片所示 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信