【问题标题】:How to generate a RGB565 Bitmap with Bitmap.setPixel()?如何使用 Bitmap.setPixel() 生成 RGB565 位图?
【发布时间】:2015-05-13 07:10:41
【问题描述】:

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 呈现黄色 int ARGB_8888 ,但是当我将配置设置为 RGB_565 时,它也呈现黄色......对此有什么解释吗?)

【问题讨论】:

    标签: android bitmap rgb argb


    【解决方案1】:

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

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

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

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

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

    您可以将像素定义为一个短裤数组,并使用ShortBuffer.wrap() 将其包装起来,然后将其传递给copyPixelsFromBuffer。但是,它接受任何 Buffer 对象。

    【讨论】:

    • 感谢您的建议!如果位图格式为 RGB_565,则 setPixels() 将执行从 ARGB_8888 到 RGB_565 的转换。这似乎不起作用。我用canvas.drawBitmap看结果,颜色很奇怪。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-28
    • 1970-01-01
    • 1970-01-01
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多