2013-06-18 87 views
0

我用下面的方法讀取2048×2048像素的TIFF文件:閱讀TIFF柵格數據

private static int[][] convertTo2DWithoutUsingGetRGB(BufferedImage image) { 

    final short[] pixels = ((DataBufferUShort) image.getRaster().getDataBuffer()).getData(); 

    int[][] data = new int[2048][2048]; 

    int col = 0; 
    int row = 0; 
    int blockSize = 2048; 
    for (int i=0; i<pixels.length; i++) { 
     data[col][row] = pixels[i]; 
     row++; 
     if (row == blockSize) { 
      col++; 
      row = 0; 
     } 
    } 

    return data; 
} 

但是我把我的陣列上得到負值,如果我使用GDAL與蟒蛇,例如:

import gdal # Tiff Image Read 

def getArrayFromImage(fileName): 
    img = gdal.Open(fileName) 
    return img.ReadAsArray().astype(int) 

我只得到正值。在上面的java方法中,是否需要將原始值作爲tiff圖像的有效像素進行處理?

回答

1

不知道爲什麼,但解決了這個問題,通過將65536添加到該值,如果它是負值。

int j = pixels[i]; 
if (j < 0) { 
    j += 65536; 
} 
data[col][row] = j;