svn - r34333 - trunk/modules/plugin/arcsde/datastore/src/main/java/org/geotools/arcsde/raster/io

1 message Options
Embed this post
Permalink
svn_geotools

svn - r34333 - trunk/modules/plugin/arcsde/datastore/src/main/java/org/geotools/arcsde/raster/io

Reply Threaded More More options
Print post
Permalink
Author: groldan
Date: 2009-11-04 18:00:56 -0500 (Wed, 04 Nov 2009)
New Revision: 34333

Modified:
   trunk/modules/plugin/arcsde/datastore/src/main/java/org/geotools/arcsde/raster/io/TileFetchCommand.java
Log:
GEOT-2616, fix 1-bit data fetching

Modified: trunk/modules/plugin/arcsde/datastore/src/main/java/org/geotools/arcsde/raster/io/TileFetchCommand.java
===================================================================
--- trunk/modules/plugin/arcsde/datastore/src/main/java/org/geotools/arcsde/raster/io/TileFetchCommand.java 2009-11-04 22:32:45 UTC (rev 34332)
+++ trunk/modules/plugin/arcsde/datastore/src/main/java/org/geotools/arcsde/raster/io/TileFetchCommand.java 2009-11-04 23:00:56 UTC (rev 34333)
@@ -87,13 +87,12 @@
 
     private static Map<RasterCellType, TileDataFetcher> tileDataSetters = new HashMap<RasterCellType, TileDataFetcher>();
     static {
-        {
-            ByteTileSetter byteTileSetter = new ByteTileSetter();
-            tileDataSetters.put(TYPE_1BIT, byteTileSetter);
-            tileDataSetters.put(TYPE_4BIT, byteTileSetter);
-            tileDataSetters.put(TYPE_8BIT_S, byteTileSetter);
-            tileDataSetters.put(TYPE_8BIT_U, byteTileSetter);
-        }
+        final ByteTileSetter byteTileSetter = new ByteTileSetter();
+        tileDataSetters.put(TYPE_1BIT, new OneBitTileSetter());
+        tileDataSetters.put(TYPE_4BIT, byteTileSetter);
+        tileDataSetters.put(TYPE_8BIT_S, byteTileSetter);
+        tileDataSetters.put(TYPE_8BIT_U, byteTileSetter);
+        // tileDataSetters.put(RasterCellType.TYPE_16BIT_U, value)
     }
 
     private TileDataFetcher getTileDataFetcher(final RasterCellType pixelType) {
@@ -113,6 +112,45 @@
         public abstract void setTileData(int numPixels, SeRasterTile tile, TileInfo tileInfo);
     }
 
+    /**
+     *
+     */
+    private static final class OneBitTileSetter extends TileDataFetcher {
+
+        @Override
+        public void setTileData(final int numPixels, final SeRasterTile tile, TileInfo tileInfo) {
+
+            byte[] tileData = new byte[numPixels];
+
+            final int numPixelsRead = tile.getNumPixels();
+
+            if (numPixelsRead > 0) {
+                if (numPixelsRead != numPixels) {
+                    throw new IllegalStateException("Expected num pixels read to be " + numPixels
+                            + " but got " + numPixelsRead);
+                }
+                try {
+                    tile.getPixels(tileData);
+                } catch (Exception e) {
+                    throw new RuntimeException(e);
+                }
+                // getPixels(byte[]) for a 1-bit raster sets set bits to 255 instead of 1, we want
+                // them to be 1
+                final byte bitSet = (byte) 0xFF;
+                for (int i = 0; i < numPixels; i++) {
+                    if (bitSet == tileData[i]) {
+                        tileData[i] = 1;
+                    }
+                }
+            }
+
+            tileInfo.setTileData(tileData);
+        }
+    }
+
+    /**
+     *
+     */
     private static final class ByteTileSetter extends TileDataFetcher {
         @Override
         public void setTileData(final int numPixels, final SeRasterTile tile, TileInfo tileInfo) {
@@ -129,8 +167,7 @@
                 try {
                     tile.getPixels(tileData);
                 } catch (Exception e) {
-                    // TODO Auto-generated catch block
-                    e.printStackTrace();
+                    throw new RuntimeException(e);
                 }
             }
 


------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day
trial. Simplify your report design, integration and deployment - and focus on
what you do best, core application coding. Discover what's new with
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
GeoTools-commits mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/geotools-commits