2013-11-27 74 views
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); 
    } 

是這樣行嗎?我不知道爲什麼,但它仍然是錯誤的...

回答

0

int指的是一個32位有符號整數,但你的字節反轉器是寫入一個16位有符號整數,所以它只能用於正值高達32767 。如果你有任何高於你需要的值,那麼在把它們「組合」在一起之前,一次一個掩碼。