Android开发之加载大分辨率图片
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Android开发之加载大分辨率图片,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2507字,纯文字阅读大概需要4分钟。
内容图文
Android中图片占用内存的大小=图片的总像数*每个像数占用的大小。
Android保存图片像素信息使用ARGB,意思是每个像素占用4个字节。
以分辨率为2400*3200的图片来说,加载到Android需要2400*3200*4=30720000字节,需要30000Kb,需要29.30Mb
直接把这个分辨率的图片加载到内存中,很容易OOM。
解决方法:把图片的分辨率缩放到手机屏幕的分辨率大小,这样就不会出现OOM
1.通过getWindowManager().getDefaultDisplay()方法获取到android.view.Display对象
2.通过android.view.Display对象的getRealSize()方法获取到手机屏幕分辨率的宽高
3.通过android.graphics.BitmapFactory的decodeFile(String pathName, Options opts)方法加载图片,第一个参数为图片的路径,第二个参数为android.graphics.BitmapFactory.Options对象,通过设置Options对象的参数inJustDecodeBounds = true,可以在不加载图片大小的情况下,获取到图片分辨率的宽高
4.把图片分辨率的宽和高分辨除以屏幕分辨率的宽和高,得到两个缩放比例,取较大值的缩放比例对图片进行缩放(注意:该缩放比例最好大于1,小于1的话,就不需要缩放了直接加载就可以了)
5.设置Options对象的参数inSampleSize为缩放比例,inJustDecodeBounds为false,然后使用android.graphics.BitmapFactory的decodeFile(String pathName, Options opts)方法加载图片,获取到以进行缩放的Bitmap的对象(inJustDecodeBounds为true时不会返回Bitmap对象)
6.处理该Bitmap对象。
1 import android.app.Activity; 2 import android.graphics.Bitmap; 3 import android.graphics.BitmapFactory; 4 import android.graphics.BitmapFactory.Options; 5 import android.graphics.Point; 6 import android.os.Bundle; 7 import android.view.Display; 8 import android.view.View; 9 import android.widget.ImageView; 10 11 public class MainActivity extends Activity { 1213 @Override 14protectedvoid onCreate(Bundle savedInstanceState) { 15super.onCreate(savedInstanceState); 16 setContentView(R.layout.activity_main); 17 } 1819publicvoid click(View v) { 20 Options opt = new Options(); 21 opt.inJustDecodeBounds = true; 22 BitmapFactory.decodeFile("sdcard/dog.jpg", opt); 23int imageHeight = opt.outHeight; 24int imageWidth = opt.outWidth; 2526 Display display = getWindowManager().getDefaultDisplay(); 27 Point point = new Point(); 28// 该方法已过时,使用getRealSize()方法替代。也可以使用getSize(),但是不能准确的获取到分辨率 29// int screenHeight = display.getHeight(); 30// int screenWidth = display.getWidth();3132 display.getRealSize(point); 33int screenHeight = point.y; 34int screenWidth = point.x; 3536int scale = 1; 37int scaleWidth = imageWidth / screenWidth; 38int scaleHeigh = imageHeight / screenHeight; 39if (scaleWidth >= scaleHeigh && scaleWidth > 1) { 40 scale = scaleWidth; 41 } elseif (scaleWidth < scaleHeigh && scaleHeigh > 1) { 42 scale = scaleHeigh; 43 } 4445 opt.inSampleSize = scale; 46 opt.inJustDecodeBounds = false; 4748 Bitmap bm = BitmapFactory.decodeFile("sdcard/dog.jpg", opt); 49 ImageView iv = (ImageView) findViewById(R.id.iv); 50 iv.setImageBitmap(bm); 51 } 5253 }
原文:http://www.cnblogs.com/liyiran/p/5081648.html
内容总结
以上是互联网集市为您收集整理的Android开发之加载大分辨率图片全部内容,希望文章能够帮你解决Android开发之加载大分辨率图片所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。