当前位置:首页 » 安卓系统 » android显示bitmap

android显示bitmap

发布时间: 2023-03-19 19:05:11

① Android 图片加载(一)高效加载Bitmap 基础篇

由于Bitmap的特殊性以及Android对单个应用所规定的最大内存限制,我们在同时加载大量Bitmap时很容易发生内存溢出,即我们通常所说的OutOfMemoryError(OOM),因此高效加载Bitmap就成为了每个Android开发者的必备技能。

在学习如何高效地加载Bitmap之前,首先介绍一下如何加载一个Bitmap。我们都知道,Bitmap在Android中通常指的是一张图片,那么如何将JPG、PNG等格式的图片转换成Bitmap对象呢?BitmapFactory类给我们提供了一些方法:

接下来开始介绍如何高效地加载Bitmap,其实核心思想很简单: 就是采用BitmapFactory.Options参数来调整图片尺寸来适配控件的大小。

假如我们显示图片的控件ImageView宽高为100×100像素,而图片的尺寸为1024×1024像素,这个时候如果将整个图片加载进来并显示到控件上,自然是很占用内存资源的。这个时候可以通过BitmapFactory.Options按一定的采样率加载缩小后的图片,再将缩小后的图片显示到ImageView中,这样就能减小内存占用从而在一定程度上避免OOM的发生。

通过BitmapFactory.Options来缩放图片,主要是使用它的inSampleSize参数,也就是前面提到的采样率。当采样率inSampleSize为1时,采样后的图片大小为原图大小;当采样率inSampleSize>1,比如为2时,采样后的图片宽高都为原图的1/2,即像素降为原图的1/4,占用的内存大小也就是原图的1/4;比较特殊的是,当采样率inSampleSize<1时,系统会自动将该值当做1来处理。 因此可以得出一个结论:采样率inSampleSize必须是大于1的整数图片才会有缩小的效果,并且采样率同时作用于宽高,也就是说采样后的图片会缩小到原图的1/(inSampleSize^2)。比如inSampleSize=4,那么缩放比例为1/16。

我们现在知道了,通过采样率可以提高图片的加载效率,那么如何才能计算出最合适的采样率?我们可以按照如下流程:

接下来以decodeFile方法为例实现图片的缩放,其他三个方法处理方式类似。

下一篇: Android 图片加载(二)图片加载框架Glide 入门篇

《Android开发艺术探索》

② android 读取Bitmap的几种方式

想读取本地项目里的资源图片,但又不能用到R文件。查了很多资料终于找到了。 现总结以下几种读取Bitmap的方法。 1.以文件流的方式,假设在sdcard下有 test.png图片 FileInputStream fis = new FileInputStream("/sdcard/test.png"); Bitmap bitmap=BitmapFactory.decodeStream(fis); 2. 以R文件的方式,假设 res/drawable下有 test.jpg文件Bitmapbitmap =BitmapFactory.decodeResource(this.getContext().getResources(), R.drawable.test); 3.以ResourceStream的方式,但不用到R文件。 Bitmap.bitmap=BitmapFactory.decodeStream(getClass().getResourceAsStream(“/res/drawable/test.png”)); 图片名就可以读取到 Bitmap啦。 BitmapFactory.Options options = new BitmapFactory.Options(); options.inSampleSize = 2; //图片宽高都为原来的二分之一,即图片为原来的四分一 //以上代码可以优化内存溢出,但它只是改变图片大小,并不能彻底解决内存溢出。

③ Android开发中ImageView里的Bitmap很模糊,怎么解决

目标和容器不一致导致的。
1、设置imageview的scaleType为center,即不随着控件的大小而去硬性适配;
2、确保所得bitmap即图片有预期的大小;
3、设置imageview的宽高为wrap,去适应bitmap的大小。

④ android中怎么获取一个bitmap在屏幕中位置

是要编写一个这样的功能么,android提供的api里面一般图片都是bitmap,可以通过canvas.drawbitmap的方法在view进行图片的绘制,在方法中需要进行传入一个类型为matrix的参数,设置martrix的一些参数就可以进行图片的放大的绘制,这只是显示,也就是mvc中的view层,然后通过提供的一些触摸函数的重写并实现自己需要的一些功能,如拖动,实际上就是改变bitmap绘制的位置。关于触摸的处理和图片的绘制可以在网上进行一些教程的搜索,我就不罗列了,最终就是需要通过控制函数来改变图片的绘制方式,这也许就是你所需要的功能。

热点内容
python嵌套for循环 发布:2025-05-11 01:51:44 浏览:225
安卓怎么取消后台限制 发布:2025-05-11 01:45:45 浏览:255
一键搭建sk5服务器 发布:2025-05-11 01:40:09 浏览:511
鸿业acs加密锁模拟器 发布:2025-05-11 01:38:49 浏览:935
神庙逃亡2安卓版怎么玩 发布:2025-05-11 01:38:05 浏览:159
凯杰都什么配置 发布:2025-05-11 01:38:04 浏览:469
php微信开源系统源码 发布:2025-05-11 01:37:54 浏览:811
pythonfor多个参数 发布:2025-05-11 01:12:32 浏览:74
plcsfc编程 发布:2025-05-11 01:11:56 浏览:166
安卓手机能删除什么东西 发布:2025-05-11 01:03:55 浏览:415