【发布时间】:2012-05-27 01:18:15
【问题描述】:
我有一个使用 python PIL 创建的 png 文件,其中包含一个高度图(正值)。
格式为:单通道(灰度)16bit,即每像素16bit。
我用BitmapFactory.decodeStream(<...data input stream...>);在android上读取了文件
我通过getWidth()和getHeight()正确得到了图片的大小。
但是,当我循环调用getPixel(i,j) 的像素时,我会得到负值,例如:-16776192 -16250872 -16250872 -16250872 -16250872 -16249848 ....
相反,我期望一个介于 0 和 65535 之间的正值。
我发现二进制值 -16250872 是 1111111111111111111111111111111111111111000010000000100000001000
这表明信息依赖于前 16 个最低有效位。
我尝试使用getPixel(i,j)&0xffff 并获得了一个合理的值,但我不确定字节序:我应该翻转提取的 2 个字节吗?
有没有办法以更优雅和便携的方式进行这种转换?
注意:该文件不是彩色 (RGBA) PNG,而是灰度 PNG 图像,每个像素都有一个 16 位值。
【问题讨论】:
-
你得到否定的原因是因为它是一个打包的值。例如:白色 (255,255,255,255) 将被包装为 11111111 11111111 11111111 11111111
-
是的,我知道。例如,在 32bpp 像素 RGBA 位图中,像素存储为 4 字节(0 到 255 之间的值)打包成 32 位整数。但是我有一个 16 bpp、单通道 PNG 和单色通道(灰色电平)。获得该值的正确方法是什么?
标签: java android bitmap png 16-bit