2013-06-18 66 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;