X-Git-Url: http://gitweb.fperrin.net/?a=blobdiff_plain;f=src%2Ftim%2Fprune%2Ffunction%2Fsrtm%2FSrtmSource.java;fp=src%2Ftim%2Fprune%2Ffunction%2Fsrtm%2FSrtmSource.java;h=44ceccfab52a13a5ced20108ad539cafbf2c6fb2;hb=842bb718cc05d82d37cf6464175baa9f05c80297;hp=0791cd833c28fc7a2acd14cb4901a1a675d3cae2;hpb=5db8794926ba12d45ed0f652a9c9e6e9db1cde3d;p=GpsPrune.git diff --git a/src/tim/prune/function/srtm/SrtmSource.java b/src/tim/prune/function/srtm/SrtmSource.java index 0791cd8..44ceccf 100644 --- a/src/tim/prune/function/srtm/SrtmSource.java +++ b/src/tim/prune/function/srtm/SrtmSource.java @@ -19,11 +19,19 @@ public abstract class SrtmSource { throws IOException { int[] heights = new int[tileSize]; + int dataSize = 2 * tileSize; + byte[] buffer = new byte[dataSize]; // Read entire file contents into one byte array - for (int i = 0; i < heights.length; i++) + int alreadyRead = 0; + while (alreadyRead < dataSize) { - heights[i] = inStream.read() * 256 + inStream.read(); - if (heights[i] >= 32768) {heights[i] -= 65536;} + alreadyRead += inStream.read(buffer, alreadyRead, dataSize - alreadyRead); + } + for (int i = 0; i < tileSize; i++) + { + // Bytes are signed. Cast high-order to int with sign + // extension, and clamp low-order to its unsigned range + heights[i] = buffer[2 * i] * 256 + (0xff & buffer[2 * i + 1]); } // Close stream inStream.close();