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