如何使用Bitmap.setPixel()生成RGB565位图?

时间:2015-05-13 07:10:41

标签: android bitmap rgb argb

Bitmap.setPixels()似乎没有帮助〜它只用ARGB值填充位图。

 img=Bitmap.createBitmap(width,height,Config.RGB_565);
 img.setPixels(Y, 0, mWidth, 0, 0, mWidth, mHeight);

无论我如何填充int[]Y,它似乎都会为Bitmap提供ARGB_8888值 (例如。Y[i]=0xffffff00呈现黄色ARGB_8888,但是当我将配置设置为RGB_565时,它也呈现黄色......是否有任何解释?)

1 个答案:

答案 0 :(得分:0)

指定为setPixels()的第一个参数的输入数组是ARGB_8888 int值的数组,无论Bitmap的格式如何。来自setPixels() documentation

  

使用数组中的颜色替换位图中的像素。数组中的每个元素都是一个打包的 int ,预先表示非预乘的 ARGB颜色

如果位图格式为RGB_565,则setPixels()将执行从ARGB_8888RGB_565的转换。

如果您想提供RGB_565数据(假设RGB_565的位图格式),请使用copyPixelsFromBuffer

  

从当前位置开始复制缓冲区中的像素,覆盖位图的像素。缓冲区中的数据不会以任何方式更改(与setPixels()不同,后者从未预设的32位转换为位图的本机格式。

您可以将像素定义为短裤数组,并使用ShortBuffer.wrap()将其换行并将其传递给copyPixelsFromBuffer。它接受任何Buffer对象。