从我的相机,我得到一个字节数组。每两个字节(数组的两个元素)定义一个像素。如果我理解正确的话,目前大多数设备只支持 256 种灰度。所以,对于我的形象,我只需要 MSB。问题是这是一个流式视频,并且为由每秒字节组成的位图创建一个新数组需要很长时间。是否可以使用某些类输出“降级”图片(16 位 -> 8 位)?
编辑:如果有类可以为每像素 16 位的灰度创建位图,这对我来说也很有趣
从我的相机,我得到一个字节数组。每两个字节(数组的两个元素)定义一个像素。如果我理解正确的话,目前大多数设备只支持 256 种灰度。所以,对于我的形象,我只需要 MSB。问题是这是一个流式视频,并且为由每秒字节组成的位图创建一个新数组需要很长时间。是否可以使用某些类输出“降级”图片(16 位 -> 8 位)?
编辑:如果有类可以为每像素 16 位的灰度创建位图,这对我来说也很有趣
为了加快转换处理,您可能会认为使用
OpenGL ES
使用纹理将颜色位图渲染到 pbuffer 表面,并在 glsl 中创建图像的灰度版本。该值可以像这样从 RGB 表示中计算出来luminance = 0.21 * R + 0.72 * G + 0.07 * B
。此方法需要大量工作来设置 GLES 环境,并且加载/读取位图可能效率不高。
渲染脚本
编写一个简单的渲染脚本内核,从原始位中提取 MSB,然后将结果输出到位图。这种方法可以使比特提取过程比我猜的 Java 中的直接实现更快。
如果您以前不了解renderscript,请查看此处的官方文档,它并没有那么复杂,也不会花费您太多时间来完成您的任务。