/* * GeoTools - The Open Source Java GIS Toolkit * http://geotools.org * * (C) 2002-2008, Open Source Geospatial Foundation (OSGeo) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. */ package org.geotools.renderer.shape; /** * * @source $URL$ */ public class ScreenMap { int[] pixels; int width; int height; private int minx; private int miny; public ScreenMap(){} public ScreenMap(int x, int y, int width, int height) { this.width = width; this.height = height; this.minx=x; this.miny=y; int arraySize = ((width * height) / 32) + 1; pixels = new int[arraySize]; } /** * Sets location at position x,y to the value. */ public void set(int x, int y, boolean value) { if( (x-minx)<0 || (x-minx)>width-1 ||(y-miny)<0 || (y-miny)>height-1 ) return; int bit = bit(x-minx, y-miny); int index = bit / 32; int offset = bit % 32; int mask = 1; mask = mask << offset; if (value) { pixels[index] = pixels[index] | mask; } else { int tmp = pixels[index]; tmp = ~tmp; tmp = (tmp | mask); tmp = ~tmp; pixels[index] = tmp; } } /** * Returns true if the pixel at location x,y is set or out of bounds. */ public boolean get(int x, int y) { if( (x-minx)<0 || (x-minx)>width-1 ||(y-miny)<0 || (y-miny)>height-1 ) return true; int bit = bit(x-minx, y-miny); int index = bit / 32; int offset = bit % 32; int mask = 1 << offset; try { return ((pixels[index] & mask) != 0) ? true : false; } catch (Exception e) { return true; } } private int bit(int x, int y) { return (width * y) + x; } }