0

我正在尝试从这样的文件中提取高度:http: //visibleearth.nasa.gov/view.php?id= 73934

像素被加载到 Int32 数组中

    private Int16[] heights;
    private int Width, Height;

    public TextureData(Texture2D t)
    {
        Int32[] data = new Int32[t.Width * t.Height];
        t.GetData<Int32>(data);
        Width = t.Width;
        Height = t.Height;
        t.Dispose();
        heights= new Int16[t.Width * t.Height];
        for (int i = 0; i < data.Length; ++i)
        {
            heights[i] = ReverseBytes(data[i]);
        }
    }

    // reverse byte order (16-bit)
    public static Int16 ReverseBytes(Int32 value)
    {
        return (Int16)( ((value << 8) | (value >> 8)) );
    }

我不知道为什么,但高度不正确......我认为大端转换是错误的,你能帮帮我吗?

这是结果,高度比预期的要高...... http://i.imgur.com/FukdmLF.png

编辑:

    public static int ReverseBytes(int value)
    {
        int sign = (value & 0x8000) >> 15;
        int msb = (value & 0x7F) >> 7;
        int lsb = (value & 0xFF) << 8;
        return (msb | lsb | sign);
    }

这个可以吗?我不知道为什么,但它仍然是错误的......

4

1 回答 1

0

int 指的是 32 位有符号整数,但您的字节反转器是为 16 位有符号整数编写的,因此它仅适用于高达 32767 的正值。如果您有任何高于该值的值,则需要移位然后屏蔽一个在将它们“排序”在一起之前一次一个字节。

于 2013-11-27T19:11:19.143 回答