Android ApiDemos示例解析(56):Graphics->BitmapPixels

来源:互联网 发布:为什么域名要有别名 编辑:程序博客网 时间:2024/06/01 08:34
 

android.nio 包中定义里Buffer和类型相关的子类:

Buffer类功能类似于数组,它定义了一些用于管理和服务数组中元素的方法。

Bitmap类中定义的方法public void copyPixelsFromBuffer(Buffer src)和 public void copyPixelsToBuffer(Buffer dst) 可以用来实现Bitmap 的像素数组与Buffer直接的数据交换。和Bitmap的public void getPixels(int[] pixels, …)和public void setPixels(int[] pixels, …)不同的是,使用Buffer于Bitmap进行数据交换时,buffer中的数据不会有变化,而是要setPixels ,getPixels 的int[] pixels会自动根据Bitmap 当前的配置(ARGB_8888,RGB_565,ARGB_4444)有所转换,这是因为int[] pixels格式总是ARGB_8888格式。

而在使用Buffer时,可以选用IntBuffer (ARGB_8888) ,ShortBuffer(RGB_565,ARGB_4444)对应不同的Bitmap配置。

本例BitmapPixels 介绍了如和使用IntBuffer,ShortBuffer来直接修改Buffer中Pixel值(不通过Canvas的绘图命令),然后再将Buffer中的值拷贝到Bitmap中。

例子中使用了三种不同的Bitmap配置:

  • IntBuffer  <–>ARGB_8888
  • ShortBuffer < –> RGB_565
  • ShortBuffer < –> RGB_444
1
2
3
4
5
6
int[] data8888 =new int[N];
short[] data565 =new short[N];
short[] data4444 =new short[N];
  
makeRamp(premultiplyColor(Color.RED), premultiplyColor(Color.GREEN),
 N, data8888, data565, data4444);

数组data8888,data565,data4444各自定义里三种Bitmap配置中的一行Pixels值,makeRamp为每行生成从红色到绿色的颜色渐变中间值。

makeBuffer(data8888, N) 则根据这一行的颜色渐变复制N行(最终生成一个正方形)。

1
2
3
4
5
6
IntBuffer dst = IntBuffer.allocate(n*n);
for (int i = 0; i < n; i++) {
 dst.put(src);
}
dst.rewind();
return dst;

此外代码中生成渐变颜色的算法中提到了premultiplied color,可以参见http://www.teamten.com/lawrence/graphics/premultiplication/

如果你想自己实现底层图形算法,可以考虑使用Buffer。将Buffer当成画板,绘图算法直接操作Buffer中像素的值,最后通过copyPixelsFromBuffer 将Buffer中内容显示出来。引路蜂二维图形库就是使用了类似的机制

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 新生儿42天听力筛查未通过怎么办 幼儿大便干燥拉不下粑粑怎么办 宝宝大便干燥拉粑粑带浓血怎么办 新生儿便秘4天了怎么办 写卷子的题目不认识怎么办? 2个月小猫尿床怎么办 安全教案鱼刺卡住了怎么办 被鱼刺卡住怎么办安全教案 小班健康教案生病了怎么办 被蜜蜂蛰了怎么办教案 走丢了怎么办大班反思 小孩吃了硬物怎么办 小孩吞了硬物怎么办 小学二年级孩子成绩不好怎么办 二年级孩子成绩不好怎么办 一年级学的不好二年级怎么办 17个月宝宝夜奶怎么办 小孩吃积食了吐怎么办 11个宝宝不会爬怎么办 5岁宝宝严重挑食怎么办 孩子吃菜口味重怎么办? 孩子挑食不吃菜不吃肉怎么办 微信新的朋友回复频繁怎么办 忘了闺蜜生日怎么办 把闺蜜生日忘了怎么办 忘了闺蜜的生日怎么办 一岁宝宝不吃菜怎么办 幼儿园教案虫子爬进耳朵怎么办 鼻子出血怎么办幼儿说课 英语记不住发音不准怎么办 幼儿园孩子拼音记不住怎么办 孩子总是记不住东西怎么办 走丢了怎么办小班教案 走丢了怎么办小班社会 数学加减个十分不清怎么办 孩子b和d分不清怎么办 小孩b和d分不清怎么办 高一的数学不会怎么办 农村小孩到市里上学怎么办 和外国人打官司输了怎么办 碰见爱说你的领导怎么办