Revision: 20310 http://sourceforge.net/p/jmol/code/20310 Author: hansonr Date: 2015-02-22 06:16:39 +0000 (Sun, 22 Feb 2015) Log Message: ----------- allows for Y-raster-inverted BMP files
Modified Paths: -------------- trunk/Jmol/src/javajs/img/BMPDecoder.java Modified: trunk/Jmol/src/javajs/img/BMPDecoder.java =================================================================== --- trunk/Jmol/src/javajs/img/BMPDecoder.java 2015-02-22 05:47:23 UTC (rev 20309) +++ trunk/Jmol/src/javajs/img/BMPDecoder.java 2015-02-22 06:16:39 UTC (rev 20310) @@ -107,17 +107,23 @@ + " -- aborting"); return null; } + boolean isYReversed = (imageHeight < 0); + if (isYReversed) + imageHeight = - imageHeight; int nPixels = imageHeight * imageWidth; - int nread = bitsPerPixel / 8; - int npad = (imageSize == 0 ? 4 - (imageWidth % 4) - : (imageSize / imageHeight) - imageWidth * nread) % 4; + int bytesPerPixel = bitsPerPixel / 8; + int npad = (bytesPerPixel == 4 ? 0 : imageSize == 0 ? 4 - (imageWidth % 4) + : (imageSize / imageHeight) - imageWidth * bytesPerPixel) % 4; int[] buf = new int[nPixels]; + int dpt = (isYReversed ? imageWidth : -imageWidth); + int pt0 = (isYReversed ? 0 : nPixels + dpt); + int pt1 = (isYReversed ? nPixels : -dpt); switch (bitsPerPixel) { case 32: case 24: - for (int pt = nPixels - imageWidth; pt >= 0; pt -= imageWidth) { + for (int pt = pt0; pt != pt1; pt += dpt) { for (int i = 0; i < imageWidth; i++) - buf[pt + i] = readColor(nread); + buf[pt + i] = readColor(bytesPerPixel); for (int i = 0; i < npad; i++) readByte(); } @@ -127,7 +133,7 @@ int[] palette = new int[nColors]; for (int i = 0; i < nColors; i++) palette[i] = readColor(4); - for (int pt = nPixels - imageWidth; pt >= 0; pt -= imageWidth) { + for (int pt = pt0; pt != pt1; pt += dpt) { for (int i = 0; i < imageWidth; i++) buf[pt + i] = palette[readByte()]; for (int i = 0; i < npad; i++) @@ -139,7 +145,7 @@ int color2 = readColor(3); npad = (4 - (((imageWidth + 7) / 8) % 4)) % 4; int b = 0; - for (int pt = nPixels - imageWidth; pt >= 0; pt -= imageWidth) { + for (int pt = pt0; pt != pt1; pt += dpt) { for (int i = 0, bpt = -1; i < imageWidth; i++, bpt--) { if (bpt < 0) { b = readByte(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. ------------------------------------------------------------------------------ Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server from Actuate! Instantly Supercharge Your Business Reports and Dashboards with Interactivity, Sharing, Native Excel Exports, App Integration & more Get technology previously reserved for billion-dollar corporations, FREE http://pubads.g.doubleclick.net/gampad/clk?id=190641631&iu=/4140/ostg.clktrk _______________________________________________ Jmol-commits mailing list Jmol-commits@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jmol-commits