当前位置:操作系统 > 安卓/Android >>

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

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
[java] view plaincopyprint?
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); 
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行(最终生成一个正方形)。

[java] 
IntBuffer dst = IntBuffer.allocate(n*n);  
for (int i = 0; i < n; i++) {  
 dst.put(src);  
}  
dst.rewind();  
return dst; 
IntBuffer dst = IntBuffer.allocate(n*n);
for (int i = 0; i < n; i++) {
 dst.put(src);
}
dst.rewind();
return dst;

 
\
作者:mapdigit
 

 

补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,