高さマップ(正の値)を含むPythonPILで作成されたpngファイルがあります。
形式は次のとおりです。16ビットのシングルチャネル(グレーレベル)、つまりピクセルあたり16ビット。
私はアンドロイドでファイルを読みましたBitmapFactory.decodeStream(<...data input stream...>);
getWidth()
とを介して画像のサイズを正しく取得しますgetHeight()
。
ただし、Iを呼び出すピクセルをループするとgetPixel(i,j)
、次のような負の値が得られます。-16776192 -16250872 -16250872 -16250872 -16250872-16249848...。
代わりに、0から65535の間の正の値を期待しています。
バイナリの値-16250872が1111111111111111111111111111111111111111000010000000100000001000であることを発見しました
これは、情報が最初の16の最下位ビットに依存していることを示しています。
試してみたところgetPixel(i,j)&0xffff
、もっともらしい値が得られましたが、エンディアンについてはよくわかりません。抽出された2バイトを反転する必要がありますか?
この変換をよりエレガントでポータブルな方法で行う方法はありますか?
注:ファイルはカラー(RGBA)PNGではなく、ピクセルごとに1つの16ビット値を持つグレーレベルのPNG画像です。