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