android中的图像处理

现在的移动手机内存越来越大,但是我们在开发时任然需要对我们的应用的内存经行把控,对于内存中的图像,如果

占用的内存太大,不及时释放或者对图片经行压缩,仍然会出现OOM异常

对于图片的加载,显示,处理,现在有许多第三方的工具类,如比较有名的Xutils,或者开源的框架如Universial Image Loader等等,这里不一一例举。

我们先看下图像的相关东西

颜色模型

   对于常见的颜色模型,也就RGB,CMYK,YUV,ARGB。大多数API都采用RGB模型,android的API一般采用RGB和ARGB。

对于颜色的编码,说白了就是一个像素所占内存的大小,有浮点数编码(0.5,0.3,0.6),在java中一个float占4

个字节,所以一个像素要占12个字节。24位的整数编码(255,255,255),这种方式每个颜色位占用1个字节,所以一

个像素需要3字节,在java中可以用int类型存储,这样多出来的高8位我们可以存储透明度,所以就有了ARGB编码

我们可以在BitmapFactory中看到RGB888和ARGB8888的原因。还有16位整数编码(31,45,31)从左到右依次用5bit,

6bit,5bit,也就是RGB565,所以这种编码一般用short或者char存储就可以了,当然他也可以表示透明度,这时候需

要相应的调整,4bit的透明度,4bit的R,4bit的G,4bit的B,这就是ARGB4444。

打个比方如果用ARGB8888编码,放入一张400*400的图片,那么就需要400*400*4字节的空间了

我们可以看出使用合适的编码,可以为我们的内存减少不少的空间

对于OOM这种异常我们有如下几种方式去处理:

1 缓存图像到内存,采用软引用缓存到内存,而不是在每次使用的时候都从新加载到内存;

2 调整图像大小,手机屏幕尺寸有限,分配给图像的显示区域本身就更小,有时图像大小可以做适当调整;

3 采用低内存占用量的编码方式,比如Bitmap.Config.ARGB_4444比Bitmap.Config.ARGB_8888更省内存;

4 及时回收图像,如果引用了大量Bitmap对象,而应用又不需要同时显示所有图片,可以将暂时用不到的Bitmap对象

及时回收掉;

5 自定义堆内存分配大小,优化Dalvik虚拟机的堆内存分配;

时间: 2024-10-06 09:32:35

android中的图像处理的相关文章

Android图像处理技术(实现Android中的PS)(六)

好吧,关于Android中图像处理的最后一个微博,保证是最后一个了,希望泥萌不要骂我... 今天想实现的效果是:终极大招:利用BitmapMesh来实现一些特效. 当然,BitmapMesh功能十分强大,打开大家的脑洞,相信大家会设计出更炫丽的特效: 和往常一样,首先,上效果图,卖个萌: 怎么样,普通的一张图按正弦曲线跳起舞来了... 然后,开始吧: 首先,自定义View:BitmapMeshView: public class BitmapMeshView extends View { //后

Android中Canvas绘图之PorterDuffXfermode使用及工作原理详解

概述 类android.graphics.PorterDuffXfermode继承自android.graphics.Xfermode.在用Android中的Canvas进行绘图时,可以通过使用PorterDuffXfermode将所绘制的图形的像素与Canvas中对应位置的像素按照一定规则进行混合,形成新的像素值,从而更新Canvas中最终的像素颜色值,这样会创建很多有趣的效果.当使用PorterDuffXfermode时,需要将将其作为参数传给Paint.setXfermode(Xfermo

Android学习——在Android中使用OpenCV的第一个程序

刚开始学习Android,由于之前比较熟悉OpenCV,于是就想先在Android上运行OpenCV试试 =================================================================================== 1.环境配置 JDK Eclipse ADT CDT Android SDK Android NDK cygwin OpenCV for Android 2.4.9 这部分网上很多,我就不再赘述了,可以参考:http://bl

Android中图像变换Matrix的原理、代码验证和应用

转自 http://biandroid.iteye.com/blog/1399462 第一部分 Matrix的数学原理 在Android中,如果你用Matrix进行过图像处理,那么一定知道Matrix这个类.Android中的Matrix是一个3 x 3的矩阵,其内容如下: Matrix的对图像的处理可分为四类基本变换: Translate           平移变换 Rotate                旋转变换 Scale                  缩放变换 Skew    

Android 中图片压缩分析(上)

作者: shawnzhao,QQ音乐技术团队一员 一.前言 在 Android 中进行图片压缩是非常常见的开发场景,主要的压缩方法有两种:其一是质量压缩,其二是下采样压缩. 前者是在不改变图片尺寸的情况下,改变图片的存储体积,而后者则是降低图像尺寸,达到相同目的. 由于本文的篇幅问题,分为上下两篇发布. 二.Android 质量压缩逻辑 在Android中,对图片进行质量压缩,通常我们的实现方式如下所示: ByteArrayOutputStream outputStream = new Byte

谈谈-Android中的接口回调技术

Android中的接口回调技术有很多应用的场景,最常见的:Activity(人机交互的端口)的UI界面中定义了Button,点击该Button时,执行某个逻辑. 下面参见上述执行的模型,讲述James对Android接口回调技术的理解(结合前人的知识和自己的实践). 使用一个比喻很形象地说明:客户端有个疑问打电话请教服务端,但服务端无法现场给出解答,相互之间约定:服务端一旦有答案,使用电话的方式反馈给客户端. 以上有三个主体:客户端.服务端和接口(方式). 接口回调的原理框图说明: Demo界面

关于android中事件传递和分发的一些小理解

android中 当我们的手指触摸屏幕将产生一个事件, (假设 这个过程中如果没有显示的去拦截该事件的话)   这个事件会逐级传递到视图的最底层,即使在中间某些视图会响应这个事件( 这个视图也不会去消费这个事件),     仍然是会传递到底层(底层不响应该事件),然后再由底层回传到顶层,在传回顶层的过程中 ,   原先会响应该事件的视图才会去消费这个事件 例如在左图中                                 A                               

浅谈android中仅仅使用一个TextView实现高仿京东,淘宝各种倒计时

今天给大家带来的是仅仅使用一个TextView实现一个高仿京东.淘宝.唯品会等各种电商APP的活动倒计时.最近公司一直加班也没来得及时间去整理,今天难得休息想把这个分享给大家,只求共同学习,以及自己后续的复习.为什么会想到使用一个TextView来实现呢?因为最近公司在做一些优化的工作,其中就有一个倒计时样式,原来开发的这个控件的同事使用了多个TextView拼接在一起的,实现的代码冗余比较大,故此项目经理就说:小宏这个就交给你来优化了,并且还要保证有一定的扩展性,当时就懵逼了.不知道从何处开始

Android中监听ListView滑动到底部

Android中的应用就是ListView中向下滑动加载更多的功能,不要再onScroll方法中进行判断,那样当滑动到底部的时候,可能我们需要触发点什么事件,比如加载更多.隐藏某个控件等等. 第一种方法是直接滑动到底部就触发 listview.setOnScrollListener(new OnScrollListener(){       @Override       public void onScrollStateChanged(AbsListView view, int scrollS