2013-11-27 2 views
0

나는이 같은 파일에서 높이를 추출하려고 : 픽셀은 INT32 배열로로드 http://visibleearth.nasa.gov/view.php?id=73934빅 - 엔디안 변환

내가 그나마

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))); 
    } 

알고 왜 그러나 높이가 맞지 않습니다 ... 빅 엔디안 변환이 잘못되었다고 생각합니다. 제발 도와주세요.

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); 
    } 

이 괜찮 :

이 결과는 http://i.imgur.com/FukdmLF.png

편집 ... 높이가 예상보다 높은입니까? 이유는 모르겠지만 여전히 잘못되었습니다 ...

답변

0

int는 32 비트 부호있는 정수를 참조하지만 바이트 반전자는 16 비트 부호있는 정수로 작성되므로 32767까지의 양수 값에서만 작동합니다 . 만약 당신이 그 이상의 값을 가지고 있다면, 한 번에 한 바이트 씩 이동하고 마스킹해야합니다.

관련 문제