List of usage examples for java.awt Graphics2D drawOval
public abstract void drawOval(int x, int y, int width, int height);
From source file:com.piketec.jenkins.plugins.tpt.publisher.PieChart.java
/** * Render the pie chart with the given height * // w ww . j av a2 s . c om * @param height * The height of the resulting image * @return The pie chart rendered as an image */ public BufferedImage render(int height) { BufferedImage image = new BufferedImage(totalWidth, totalHeight, BufferedImage.TYPE_INT_RGB); Graphics2D g2 = image.createGraphics(); g2.scale(zoom, zoom); // fill background to white g2.setColor(Color.WHITE); g2.fill(new Rectangle(totalWidth, totalHeight)); // prepare render hints g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY); g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC); g2.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON); g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); g2.setStroke(new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)); // draw shadow image g2.drawImage(pieShadow.getImage(), 0, 0, pieShadow.getImageObserver()); double start = 0; List<Arc2D> pies = new ArrayList<>(); // pie segmente erzeugen und fuellen if (total == 0) { g2.setColor(BRIGHT_GRAY); g2.fillOval(centerX - radius, centerY - radius, 2 * radius, 2 * radius); g2.setColor(Color.WHITE); g2.drawOval(centerX - radius, centerY - radius, 2 * radius, 2 * radius); } else { for (Segment s : segments) { double portionDegrees = s.getPortion() / total; Arc2D pie = paintPieSegment(g2, start, portionDegrees, s.getColor()); if (withSubSegments) { double smallRadius = radius * s.getSubSegmentRatio(); paintPieSegment(g2, start, portionDegrees, smallRadius, s.getColor().darker()); } start += portionDegrees; // portion degree jetzt noch als String (z.B. "17.3%" oder "20%" zusammenbauen) String p = String.format(Locale.ENGLISH, "%.1f", Math.rint(portionDegrees * 1000) / 10.0); p = removeSuffix(p, ".0"); // evtl. ".0" bei z.B. "25.0" abschneiden (-> "25") s.setPercent(p + "%"); pies.add(pie); } // weissen Rahmen um die pie segmente zeichen g2.setColor(Color.WHITE); for (Arc2D pie : pies) { g2.draw(pie); } } // Legende zeichnen renderLegend(g2); // "xx%" Label direkt auf die pie segmente zeichen g2.setColor(Color.WHITE); float fontSize = 32f; g2.setFont(NORMALFONT.deriveFont(fontSize).deriveFont(Font.BOLD)); start = 0; for (Segment s : segments) { if (s.getPortion() < 1E-6) { continue; // ignore segments with portions that are extremely small } double portionDegrees = s.getPortion() / total; double angle = start + portionDegrees / 2; // genau in der Mitte des Segments double xOffsetForCenteredTxt = 8 * s.getPercent().length(); // assume roughly 8px per char int x = (int) (centerX + 0.6 * radius * Math.sin(2 * Math.PI * angle) - xOffsetForCenteredTxt); int y = (int) (centerY - 0.6 * radius * Math.cos(2 * Math.PI * angle) + fontSize / 2); g2.drawString(s.getPercent(), x, y); start += portionDegrees; } return image; }
From source file:au.org.ala.biocache.web.MapController.java
@Deprecated @RequestMapping(value = "/occurrences/wms", method = RequestMethod.GET) public void pointsWmsImage(SpatialSearchRequestParams requestParams, @RequestParam(value = "colourby", required = false, defaultValue = "0") Integer colourby, @RequestParam(value = "width", required = false, defaultValue = "256") Integer widthObj, @RequestParam(value = "height", required = false, defaultValue = "256") Integer heightObj, @RequestParam(value = "zoom", required = false, defaultValue = "0") Integer zoomLevel, @RequestParam(value = "symsize", required = false, defaultValue = "4") Integer symsize, @RequestParam(value = "symbol", required = false, defaultValue = "circle") String symbol, @RequestParam(value = "bbox", required = false, defaultValue = "110,-45,157,-9") String bboxString, @RequestParam(value = "type", required = false, defaultValue = "normal") String type, @RequestParam(value = "outline", required = true, defaultValue = "false") boolean outlinePoints, @RequestParam(value = "outlineColour", required = true, defaultValue = "0x000000") String outlineColour, HttpServletResponse response) throws Exception { // size of the circles int size = symsize.intValue(); int width = widthObj.intValue(); int height = heightObj.intValue(); requestParams.setStart(0);//from w w w. j a v a 2s . c o m requestParams.setPageSize(Integer.MAX_VALUE); String query = requestParams.getQ(); String[] filterQuery = requestParams.getFq(); if (StringUtils.isBlank(query) && StringUtils.isBlank(requestParams.getFormattedQuery())) { displayBlankImage(width, height, false, response); return; } // let's force it to PNG's for now response.setContentType("image/png"); // Convert array to list so we append more values onto it ArrayList<String> fqList = null; if (filterQuery != null) { fqList = new ArrayList<String>(Arrays.asList(filterQuery)); } else { fqList = new ArrayList<String>(); } // the bounding box double[] bbox = new double[4]; int i; i = 0; for (String s : bboxString.split(",")) { try { bbox[i] = Double.parseDouble(s); i++; } catch (Exception e) { logger.error(e.getMessage(), e); } } double pixelWidth = (bbox[2] - bbox[0]) / width; double pixelHeight = (bbox[3] - bbox[1]) / height; bbox[0] += pixelWidth / 2; bbox[2] -= pixelWidth / 2; bbox[1] += pixelHeight / 2; bbox[3] -= pixelHeight / 2; //offset for points bounding box by size double xoffset = (bbox[2] - bbox[0]) / (double) width * (size * 2); double yoffset = (bbox[3] - bbox[1]) / (double) height * (size * 2); //adjust offset for pixel height/width xoffset += pixelWidth; yoffset += pixelHeight; double[] bbox2 = new double[4]; bbox2[0] = convertMetersToLng(bbox[0] - xoffset); bbox2[1] = convertMetersToLat(bbox[1] - yoffset); bbox2[2] = convertMetersToLng(bbox[2] + xoffset); bbox2[3] = convertMetersToLat(bbox[3] + yoffset); bbox[0] = convertMetersToLng(bbox[0]); bbox[1] = convertMetersToLat(bbox[1]); bbox[2] = convertMetersToLng(bbox[2]); bbox[3] = convertMetersToLat(bbox[3]); double[] pbbox = new double[4]; //pixel bounding box pbbox[0] = convertLngToPixel(bbox[0]); pbbox[1] = convertLatToPixel(bbox[1]); pbbox[2] = convertLngToPixel(bbox[2]); pbbox[3] = convertLatToPixel(bbox[3]); String bboxString2 = bbox2[0] + "," + bbox2[1] + "," + bbox2[2] + "," + bbox2[3]; bboxToQuery(bboxString2, fqList); PointType pointType = getPointTypeForZoomLevel(zoomLevel); String[] newFilterQuery = (String[]) fqList.toArray(new String[fqList.size()]); // convert back to array requestParams.setFq(newFilterQuery); List<OccurrencePoint> points = searchDAO.getFacetPoints(requestParams, pointType); logger.debug("Points search for " + pointType.getLabel() + " - found: " + points.size()); if (points.size() == 0) { displayBlankImage(width, height, false, response); return; } BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); Graphics2D g = (Graphics2D) img.getGraphics(); g.setColor(Color.RED); int x, y; int pointWidth = size * 2; double width_mult = (width / (pbbox[2] - pbbox[0])); double height_mult = (height / (pbbox[1] - pbbox[3])); g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); Color oColour = Color.decode(outlineColour); for (i = 0; i < points.size(); i++) { OccurrencePoint pt = points.get(i); float lng = pt.getCoordinates().get(0).floatValue(); float lat = pt.getCoordinates().get(1).floatValue(); x = (int) ((convertLngToPixel(lng) - pbbox[0]) * width_mult); y = (int) ((convertLatToPixel(lat) - pbbox[3]) * height_mult); if (colourby != null) { int colour = 0xFF000000 | colourby.intValue(); Color c = new Color(colour); g.setPaint(c); } else { g.setPaint(Color.blue); } // g.fillOval(x - (size / 2), y - (size / 2), pointWidth, pointWidth); Shape shp = getShape(symbol, x - (size / 2), y - (size / 2), pointWidth, pointWidth); g.draw(shp); g.fill(shp); if (outlinePoints) { g.setPaint(oColour); g.drawOval(x - (size / 2), y - (size / 2), pointWidth, pointWidth); } } g.dispose(); try { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); ImageIO.write(img, "png", outputStream); ServletOutputStream outStream = response.getOutputStream(); outStream.write(outputStream.toByteArray()); outStream.flush(); outStream.close(); } catch (Exception e) { logger.error("Unable to write image", e); } }
From source file:it.unibo.alchemist.boundary.gui.effects.DrawShape.java
@SuppressFBWarnings("ES_COMPARING_STRINGS_WITH_EQ") @Override//from w ww .j a va 2s.c o m public void apply(final Graphics2D g, final Node<?> n, final int x, final int y) { if (molString != molStringCached // NOPMD: pointer comparison is wanted here || incarnation == null || curIncarnation != prevIncarnation) { // NOPMD: pointer comparison is wanted here molStringCached = molString; prevIncarnation = curIncarnation; incarnation = SupportedIncarnations.get(curIncarnation.getCurrent()).get(); /* * Process in a separate thread: if it fails, does not kill EDT. */ final Thread th = new Thread(() -> molecule = incarnation.createMolecule(molString)); th.start(); try { th.join(); } catch (final InterruptedException e) { L.error("Bug.", e); } } if (!molFilter || (molecule != null && n.contains(molecule))) { final double ks = (scaleFactor.getVal() - MIN_SCALE) * 2 / (double) (SCALE_DIFF); final int sizex = size.getVal(); final int startx = x - sizex / 2; final int sizey = (int) Math.ceil(sizex * ks); final int starty = y - sizey / 2; final Color toRestore = g.getColor(); colorCache = new Color(red.getVal(), green.getVal(), blue.getVal(), alpha.getVal()); Color newcolor = colorCache; if (molPropertyFilter && molecule != null) { final int minV = (int) (minprop.getVal() * FastMath.pow(PROPERTY_SCALE, propoom.getVal())); final int maxV = (int) (maxprop.getVal() * FastMath.pow(PROPERTY_SCALE, propoom.getVal())); if (minV < maxV) { @SuppressWarnings({ "rawtypes", "unchecked" }) double propval = incarnation.getProperty((Node) n, molecule, property); if (isWritingPropertyValue()) { g.setColor(colorCache); g.drawString(Double.toString(propval), startx + sizex, starty + sizey); } propval = Math.min(Math.max(propval, minV), maxV); propval = (propval - minV) / (maxV - minV); if (reverse) { propval = 1f - propval; } newcolor = c.alter(newcolor, (float) propval); } } g.setColor(newcolor); switch (mode) { case FillEllipse: g.fillOval(startx, starty, sizex, sizey); break; case DrawEllipse: g.drawOval(startx, starty, sizex, sizey); break; case DrawRectangle: g.drawRect(startx, starty, sizex, sizey); break; case FillRectangle: g.fillRect(startx, starty, sizex, sizey); break; default: g.fillOval(startx, starty, sizex, sizey); } g.setColor(toRestore); } }
From source file:com.flexoodb.common.FlexUtils.java
static public BufferedImage createCaptcha(String text, Color background, Color fontcolor, int fontsize, int width, int height, int x, int y) throws Exception { BufferedImage img = new BufferedImage(width + 10, height, BufferedImage.TYPE_INT_RGB); img.createGraphics();//from w w w .jav a2 s. c om Graphics2D g = (Graphics2D) img.getGraphics(); g.setColor(background); g.fillRect(0, 0, img.getWidth(), img.getHeight()); Font font = new Font("Monospaced", Font.BOLD + Font.ITALIC, fontsize); g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB); g.setFont(font); g.setColor(fontcolor); char[] c = text.toCharArray(); java.util.Random random = new java.util.Random(); for (int i = 0; i < c.length; i++) { int j = random.nextInt(9); if (j > 5) { j = j - 5; } else { j = -1 * (j - 2); } char[] c1 = new char[1]; c1[0] = c[i]; g.drawChars(c1, 0, 1, x + (i * 16), y + j); } for (int i = -10; i < 20; i++) { int j = random.nextInt(8); g.drawOval((i + j) - 20, ((i * 8) - (j > 3 ? 4 : -4)), width + 20, height); } //ImageIO.write(img,"png",new File(outputfile)); return img; }
From source file:au.org.ala.biocache.web.WMSController.java
void drawUncertaintyCircles(SpatialSearchRequestParams requestParams, WmsEnv vars, int height, int width, double[] pbbox, double[] mbbox, double width_mult, double height_mult, Graphics2D g, String[] originalFqs, String[] boundingBoxFqs, boolean is4326, double[] tilebbox) throws Exception { //draw uncertainty circles double hmult = (height / (mbbox[3] - mbbox[1])); //only draw uncertainty if max radius will be > 1 pixels if (vars.uncertainty && MAX_UNCERTAINTY * hmult > 1) { //uncertainty colour/fq/radius, [0]=map, [1]=not specified, [2]=too large Color[] uncertaintyColours = { new Color(255, 170, 0, vars.alpha), new Color(255, 255, 100, vars.alpha), new Color(50, 255, 50, vars.alpha) }; //TODO: don't assume MAX_UNCERTAINTY > default_uncertainty String[] uncertaintyFqs = { "coordinate_uncertainty:[* TO " + MAX_UNCERTAINTY + "] AND -assertions:uncertaintyNotSpecified", "assertions:uncertaintyNotSpecified", "coordinate_uncertainty:[" + MAX_UNCERTAINTY + " TO *]" }; double[] uncertaintyR = { -1, MAX_UNCERTAINTY, MAX_UNCERTAINTY }; String[] fqs = new String[originalFqs.length + 3]; System.arraycopy(originalFqs, 0, fqs, 3, originalFqs.length); fqs[1] = boundingBoxFqs[0];//www .j av a 2 s .co m fqs[2] = boundingBoxFqs[1]; requestParams.setPageSize(DEFAULT_PAGE_SIZE); for (int j = 0; j < uncertaintyFqs.length; j++) { //do not display for [1]=not specified if (j == 1) { continue; } fqs[0] = uncertaintyFqs[j]; requestParams.setFq(fqs); requestParams.setFl("longitude,latitude,coordinate_uncertainty"); //only retrieve longitude and latitude requestParams.setFacet(false); //TODO: paging SolrDocumentList sdl = searchDAO.findByFulltext(requestParams); //for 4326 double top = tilebbox[3]; double bottom = tilebbox[1]; double left = tilebbox[0]; double right = tilebbox[2]; double lng, lat; int x, y; int uncertaintyRadius = (int) Math.ceil(uncertaintyR[j] * hmult); if (sdl != null && sdl.size() > 0) { g.setColor(uncertaintyColours[j]); for (int i = 0; i < sdl.size(); i++) { if (uncertaintyR[j] < 0) { uncertaintyRadius = (int) Math .ceil((Double) sdl.get(i).getFieldValue("coordinate_uncertainty") * hmult); } lng = (Double) sdl.get(i).getFieldValue("longitude"); lat = (Double) sdl.get(i).getFieldValue("latitude"); if (is4326) { x = convertLngToPixel4326(lng, left, right, width); y = convertLatToPixel4326(lat, top, bottom, height); } else { x = (int) ((convertLngToPixel(lng) - pbbox[0]) * width_mult); y = (int) ((convertLatToPixel(lat) - pbbox[3]) * height_mult); } if (uncertaintyRadius > 0) { g.drawOval(x - uncertaintyRadius, y - uncertaintyRadius, uncertaintyRadius * 2, uncertaintyRadius * 2); } else { g.drawRect(x, y, 1, 1); } } } } } }
From source file:au.org.ala.layers.web.UserDataService.java
@RequestMapping(value = WS_USERDATA_WMS, method = RequestMethod.GET) public void getPointsMap( @RequestParam(value = "CQL_FILTER", required = false, defaultValue = "") String cql_filter, @RequestParam(value = "ENV", required = false, defaultValue = "") String env, @RequestParam(value = "BBOX", required = false, defaultValue = "") String bboxString, @RequestParam(value = "WIDTH", required = false, defaultValue = "") String widthString, @RequestParam(value = "HEIGHT", required = false, defaultValue = "") String heightString, HttpServletRequest request, HttpServletResponse response) { RecordsLookup.setUserDataDao(userDataDao); response.setHeader("Cache-Control", "max-age=86400"); //age == 1 day response.setContentType("image/png"); //only png images generated int width = 256, height = 256; try {//from w w w .j a va 2 s .co m width = Integer.parseInt(widthString); height = Integer.parseInt(heightString); } catch (Exception e) { logger.error("error parsing to int: " + widthString + " or " + heightString, e); } try { env = URLDecoder.decode(env, "UTF-8"); } catch (UnsupportedEncodingException e) { logger.error("error decoding env from UTF-8: " + env, e); } int red = 0, green = 0, blue = 0, alpha = 0; String name = "circle"; int size = 4; boolean uncertainty = false; String highlight = null; String colourMode = null; for (String s : env.split(";")) { String[] pair = s.split(":"); if (pair[0].equals("color")) { while (pair[1].length() < 6) { pair[1] = "0" + pair[1]; } red = Integer.parseInt(pair[1].substring(0, 2), 16); green = Integer.parseInt(pair[1].substring(2, 4), 16); blue = Integer.parseInt(pair[1].substring(4), 16); } else if (pair[0].equals("name")) { name = pair[1]; } else if (pair[0].equals("size")) { size = Integer.parseInt(pair[1]); } else if (pair[0].equals("opacity")) { alpha = (int) (255 * Double.parseDouble(pair[1])); // } else if (pair[0].equals("uncertainty")) { // uncertainty = true; } else if (pair[0].equals("sel")) { try { highlight = URLDecoder.decode(s.substring(4), "UTF-8").replace("%3B", ";"); } catch (Exception e) { } } else if (pair[0].equals("colormode")) { colourMode = pair[1]; } } double[] bbox = new double[4]; int i; i = 0; for (String s : bboxString.split(",")) { try { bbox[i] = Double.parseDouble(s); i++; } catch (Exception e) { logger.error("error converting bounding box value to double: " + s, e); } } try { //adjust bbox extents with half pixel width/height double pixelWidth = (bbox[2] - bbox[0]) / width; double pixelHeight = (bbox[3] - bbox[1]) / height; bbox[0] += pixelWidth / 2; bbox[2] -= pixelWidth / 2; bbox[1] += pixelHeight / 2; bbox[3] -= pixelHeight / 2; //offset for points bounding box by size double xoffset = (bbox[2] - bbox[0]) / (double) width * (size + (highlight != null ? HIGHLIGHT_RADIUS * 2 + size * 0.2 : 0) + 5); double yoffset = (bbox[3] - bbox[1]) / (double) height * (size + (highlight != null ? HIGHLIGHT_RADIUS * 2 + size * 0.2 : 0) + 5); //check offset for points bb by maximum uncertainty (?? 30k ??) if (uncertainty) { double xuoffset = 30000; double yuoffset = 30000; if (xoffset < xuoffset) { xoffset = xuoffset; } if (yoffset < yuoffset) { yoffset = yuoffset; } } //adjust offset for pixel height/width xoffset += pixelWidth; yoffset += pixelHeight; double[][] bb = { { SpatialUtils.convertMetersToLng(bbox[0] - xoffset), SpatialUtils.convertMetersToLat(bbox[1] - yoffset) }, { SpatialUtils.convertMetersToLng(bbox[2] + xoffset), SpatialUtils.convertMetersToLat(bbox[3] + yoffset) } }; double[] pbbox = new double[4]; //pixel bounding box pbbox[0] = SpatialUtils.convertLngToPixel(SpatialUtils.convertMetersToLng(bbox[0])); pbbox[1] = SpatialUtils.convertLatToPixel(SpatialUtils.convertMetersToLat(bbox[1])); pbbox[2] = SpatialUtils.convertLngToPixel(SpatialUtils.convertMetersToLng(bbox[2])); pbbox[3] = SpatialUtils.convertLatToPixel(SpatialUtils.convertMetersToLat(bbox[3])); String lsid = null; int p1 = 0; int p2 = cql_filter.indexOf('&', p1 + 1); if (p2 < 0) { p2 = cql_filter.indexOf(';', p1 + 1); } if (p2 < 0) { p2 = cql_filter.length(); } if (p1 >= 0) { lsid = cql_filter.substring(0, p2); } double[] points = null; ArrayList<QueryField> listHighlight = null; QueryField colours = null; double[] pointsBB = null; Facet facet = null; String[] facetFields = null; if (highlight != null && !(colourMode != null && colourMode.equals("grid"))) { facet = Facet.parseFacet(highlight); facetFields = facet.getFields(); listHighlight = new ArrayList<QueryField>(); } int[] idx = null; if (lsid != null) { Object[] data = (Object[]) RecordsLookup.getData(lsid); points = (double[]) data[1]; pointsBB = (double[]) data[4]; idx = (int[]) data[5]; if (points == null || points.length == 0 || pointsBB[0] > bb[1][0] || pointsBB[2] < bb[0][0] || pointsBB[1] > bb[1][1] || pointsBB[3] < bb[0][1]) { setImageBlank(response); return; } ArrayList<QueryField> fields = (ArrayList<QueryField>) data[2]; for (int j = 0; j < fields.size(); j++) { if (facet != null) { for (int k = 0; k < facetFields.length; k++) { if (facetFields[k].equals(fields.get(j).getName())) { listHighlight.add(fields.get(j)); } } } if (colourMode != null) { if (fields.get(j).getName().equals(colourMode)) { synchronized (fields.get(j)) { //need to resize 'colours' facet to the correct length and store as new QueryField for (int k = 0; k < fields.size(); k++) { if (fields.get(k).getName().equals(colourMode + " resized")) { colours = fields.get(k); } } if (colours == null) { colours = fields.get(j); //does it need to be rebuilt to the correct length? int count = colours.getIntData() != null ? colours.getIntData().length : colours.getLongData() != null ? colours.getLongData().length : colours.getFloatData() != null ? colours.getFloatData().length : colours.getDoubleData() != null ? colours.getDoubleData().length : 0; if (count != points.length / 2) { QueryField qf = new QueryField(); qf.setDisplayName(colours.getDisplayName()); qf.setName(colours.getName() + " resized"); for (int k = 0; k < idx.length; k++) { qf.add(colours.getAsString(idx[k])); } qf.store(); fields.add(qf); colours = qf; } } } } } } } /* TODO: make this a copy instead of create */ BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); Graphics2D g = (Graphics2D) img.getGraphics(); g.setColor(new Color(0, 0, 0, 0)); g.fillRect(0, 0, width, height); g.setColor(new Color(red, green, blue, alpha)); g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); int x, y; int pointWidth = size * 2 + 1; double width_mult = (width / (pbbox[2] - pbbox[0])); double height_mult = (height / (pbbox[1] - pbbox[3])); if (colourMode != null && colourMode.equals("grid")) { int divs = 16; double grid_width_mult = (width / (pbbox[2] - pbbox[0])) / (256 / divs); double grid_height_mult = (height / (pbbox[1] - pbbox[3])) / (256 / divs); int[][] gridCounts = new int[divs][divs]; for (i = 0; i < points.length; i += 2) { x = (int) ((SpatialUtils.convertLngToPixel(points[i]) - pbbox[0]) * grid_width_mult); y = (int) ((SpatialUtils.convertLatToPixel(points[i + 1]) - pbbox[3]) * grid_height_mult); if (x >= 0 && x < divs && y >= 0 && y < divs) { gridCounts[x][y]++; } } int xstep = 256 / divs; int ystep = 256 / divs; for (x = 0; x < divs; x++) { for (y = 0; y < divs; y++) { int v = gridCounts[x][y]; if (v > 0) { if (v > 500) { v = 500; } int colour = Legend.getLinearColour(v, 0, 500, 0xFFFFFF00, 0xFFFF0000); g.setColor(new Color(colour)); g.fillRect(x * xstep, y * ystep, xstep, ystep); } } } } else { //circle type if (name.equals("circle")) { if (colours == null) { for (i = 0; i < points.length; i += 2) { if (points[i] >= bb[0][0] && points[i] <= bb[1][0] && points[i + 1] >= bb[0][1] && points[i + 1] <= bb[1][1]) { x = (int) ((SpatialUtils.convertLngToPixel(points[i]) - pbbox[0]) * width_mult); y = (int) ((SpatialUtils.convertLatToPixel(points[i + 1]) - pbbox[3]) * height_mult); g.fillOval(x - size, y - size, pointWidth, pointWidth); } } } else { int prevColour = -1; //!= colours[0] g.setColor(new Color(prevColour)); for (i = 0; i < points.length; i += 2) { if (points[i] >= bb[0][0] && points[i] <= bb[1][0] && points[i + 1] >= bb[0][1] && points[i + 1] <= bb[1][1]) { //colours is made the correct length, see above int thisColour = colours.getColour(i / 2); if (thisColour != prevColour) { g.setColor(new Color(thisColour)); prevColour = thisColour; } x = (int) ((SpatialUtils.convertLngToPixel(points[i]) - pbbox[0]) * width_mult); y = (int) ((SpatialUtils.convertLatToPixel(points[i + 1]) - pbbox[3]) * height_mult); g.fillOval(x - size, y - size, pointWidth, pointWidth); } } } } if (highlight != null && facet != null) { g.setStroke(new BasicStroke(2)); g.setColor(new Color(255, 0, 0, 255)); int sz = size + HIGHLIGHT_RADIUS; int w = sz * 2 + 1; for (i = 0; i < points.length; i += 2) { if (points[i] >= bb[0][0] && points[i] <= bb[1][0] && points[i + 1] >= bb[0][1] && points[i + 1] <= bb[1][1]) { if (facet.isValid(listHighlight, idx[i / 2])) { x = (int) ((SpatialUtils.convertLngToPixel(points[i]) - pbbox[0]) * width_mult); y = (int) ((SpatialUtils.convertLatToPixel(points[i + 1]) - pbbox[3]) * height_mult); g.drawOval(x - sz, y - sz, w, w); } } } } } g.dispose(); try { OutputStream os = response.getOutputStream(); ImageIO.write(img, "png", os); os.flush(); os.close(); } catch (IOException e) { logger.error("error in outputting wms/reflect image as png", e); } } catch (Exception e) { logger.error("error generating wms/reflect tile", e); } //logger.debug("[wms tile: " + (System.currentTimeMillis() - start) + "ms]"); }
From source file:org.apache.jetspeed.security.mfa.impl.CaptchaImageResource.java
protected void noiseEffects(Graphics2D gfx, BufferedImage image) { // XOR circle int dx = randomInt(width, 2 * width); int dy = randomInt(width, 2 * height); int x = randomInt(0, width / 2); int y = randomInt(0, height / 2); gfx.setXORMode(Color.GRAY);/*from w ww . j av a 2 s .c o m*/ if (config.isFontSizeRandom()) gfx.setStroke(new BasicStroke(randomInt(config.getFontSize() / 8, config.getFontSize() / 2))); else gfx.setStroke(new BasicStroke(config.getFontSize())); gfx.drawOval(x, y, dx, dy); WritableRaster rstr = image.getRaster(); int[] vColor = new int[3]; int[] oldColor = new int[3]; Random vRandom = new Random(System.currentTimeMillis()); // noise for (x = 0; x < width; x++) { for (y = 0; y < height; y++) { rstr.getPixel(x, y, oldColor); // hard noise vColor[0] = 0 + (int) (Math.floor(vRandom.nextFloat() * 1.03) * 255); // soft noise vColor[0] = vColor[0] ^ (170 + (int) (vRandom.nextFloat() * 80)); // xor to image vColor[0] = vColor[0] ^ oldColor[0]; vColor[1] = vColor[0]; vColor[2] = vColor[0]; rstr.setPixel(x, y, vColor); } } }
From source file:org.apache.ofbiz.common.CommonEvents.java
public static String getCaptcha(HttpServletRequest request, HttpServletResponse response) { try {/*from w w w . j a v a 2 s .co m*/ Delegator delegator = (Delegator) request.getAttribute("delegator"); final String captchaSizeConfigName = StringUtils.defaultIfEmpty(request.getParameter("captchaSize"), "default"); final String captchaSizeConfig = EntityUtilProperties.getPropertyValue("captcha", "captcha." + captchaSizeConfigName, delegator); final String[] captchaSizeConfigs = captchaSizeConfig.split("\\|"); final String captchaCodeId = StringUtils.defaultIfEmpty(request.getParameter("captchaCodeId"), ""); // this is used to uniquely identify in the user session the attribute where the captcha code for the last captcha for the form is stored final int fontSize = Integer.parseInt(captchaSizeConfigs[0]); final int height = Integer.parseInt(captchaSizeConfigs[1]); final int width = Integer.parseInt(captchaSizeConfigs[2]); final int charsToPrint = UtilProperties.getPropertyAsInteger("captcha", "captcha.code_length", 6); final char[] availableChars = EntityUtilProperties .getPropertyValue("captcha", "captcha.characters", delegator).toCharArray(); //It is possible to pass the font size, image width and height with the request as well Color backgroundColor = Color.gray; Color borderColor = Color.DARK_GRAY; Color textColor = Color.ORANGE; Color circleColor = new Color(160, 160, 160); Font textFont = new Font("Arial", Font.PLAIN, fontSize); int circlesToDraw = 6; float horizMargin = 20.0f; double rotationRange = 0.7; // in radians BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D g = (Graphics2D) bufferedImage.getGraphics(); g.setColor(backgroundColor); g.fillRect(0, 0, width, height); //Generating some circles for background noise g.setColor(circleColor); for (int i = 0; i < circlesToDraw; i++) { int circleRadius = (int) (Math.random() * height / 2.0); int circleX = (int) (Math.random() * width - circleRadius); int circleY = (int) (Math.random() * height - circleRadius); g.drawOval(circleX, circleY, circleRadius * 2, circleRadius * 2); } g.setColor(textColor); g.setFont(textFont); FontMetrics fontMetrics = g.getFontMetrics(); int maxAdvance = fontMetrics.getMaxAdvance(); int fontHeight = fontMetrics.getHeight(); String captchaCode = RandomStringUtils.random(6, availableChars); float spaceForLetters = -horizMargin * 2 + width; float spacePerChar = spaceForLetters / (charsToPrint - 1.0f); for (int i = 0; i < captchaCode.length(); i++) { // this is a separate canvas used for the character so that // we can rotate it independently int charWidth = fontMetrics.charWidth(captchaCode.charAt(i)); int charDim = Math.max(maxAdvance, fontHeight); int halfCharDim = (charDim / 2); BufferedImage charImage = new BufferedImage(charDim, charDim, BufferedImage.TYPE_INT_ARGB); Graphics2D charGraphics = charImage.createGraphics(); charGraphics.translate(halfCharDim, halfCharDim); double angle = (Math.random() - 0.5) * rotationRange; charGraphics.transform(AffineTransform.getRotateInstance(angle)); charGraphics.translate(-halfCharDim, -halfCharDim); charGraphics.setColor(textColor); charGraphics.setFont(textFont); int charX = (int) (0.5 * charDim - 0.5 * charWidth); charGraphics.drawString("" + captchaCode.charAt(i), charX, ((charDim - fontMetrics.getAscent()) / 2 + fontMetrics.getAscent())); float x = horizMargin + spacePerChar * (i) - charDim / 2.0f; int y = ((height - charDim) / 2); g.drawImage(charImage, (int) x, y, charDim, charDim, null, null); charGraphics.dispose(); } // Drawing the image border g.setColor(borderColor); g.drawRect(0, 0, width - 1, height - 1); g.dispose(); response.setContentType("image/jpeg"); ImageIO.write(bufferedImage, "jpg", response.getOutputStream()); HttpSession session = request.getSession(); Map<String, String> captchaCodeMap = UtilGenerics.checkMap(session.getAttribute("_CAPTCHA_CODE_")); if (captchaCodeMap == null) { captchaCodeMap = new HashMap<String, String>(); session.setAttribute("_CAPTCHA_CODE_", captchaCodeMap); } captchaCodeMap.put(captchaCodeId, captchaCode); } catch (Exception ioe) { Debug.logError(ioe.getMessage(), module); } return "success"; }
From source file:org.n52.v3d.terrainserver.povraywts.WebTerrainServlet.java
private void addAnnotations(BufferedImage pImage, int pHeight, int pWidth, double pPitch, double pYaw, boolean pDrawNorthArrow) { if (mCopyrightTextContent.length() > 0) { Graphics2D g = pImage.createGraphics(); g.drawImage(pImage, 0, 0, null); g.setColor(new java.awt.Color(mCopyrightTextColor.getRed(), mCopyrightTextColor.getGreen(), mCopyrightTextColor.getBlue())); // 1. Copyright-Vermerk // Etwas unschn: Durch JPEG-Komprimierung wird Text (insb. bei kleiner Font-Gre) wird unscharf... // TODO: Abhilfe evtl. durch Hintergrund? Font font = new Font(mCopyrightTextFont, Font.BOLD /* Style als int, siehe ggf. API-Dok.*/, mCopyrightTextSize);/* w w w . j a v a 2 s. c o m*/ g.setFont(font); // mehrzeilige Copyright-Texte erlauben: StringTokenizer str = new StringTokenizer(mCopyrightTextContent, "\n"); int spacePerRow = mCopyrightTextSize; int rows = str.countTokens(); int startPos = spacePerRow * rows; int currRow = 0; while (str.hasMoreTokens()) { int yPos = pHeight - (startPos - (currRow * spacePerRow)) + spacePerRow / 2; g.drawString(str.nextToken().trim(), 5, yPos); currRow++; } // 2. Nordpfeil if (pDrawNorthArrow) { // Zeichenparameter: double radius = 35.; double phi = 15.; // Symbolkonstruktion: int rx = (int) radius; int ry = (int) Math.round(radius * Math.sin(-pPitch * Math.PI / 180.)); int mx = pWidth - rx - 5; int my = pHeight - ry - 5; int dx = (int) (radius * Math.sin(pYaw * Math.PI / 180.)); int dy = (int) (radius * Math.sin(-pPitch * Math.PI / 180.) * Math.cos(pYaw * Math.PI / 180.)); int px = mx - dx, py = my - dy; // Pfeilspitze int qlx = mx + (int) (radius * Math.sin((pYaw + phi) * Math.PI / 180.)); int qly = my + (int) (radius * Math.sin(-pPitch * Math.PI / 180.) * Math.cos((pYaw + phi) * Math.PI / 180.)); int qrx = mx + (int) (radius * Math.sin((pYaw - phi) * Math.PI / 180.)); int qry = my + (int) (radius * Math.sin(-pPitch * Math.PI / 180.) * Math.cos((pYaw - phi) * Math.PI / 180.)); // Ellipse zeichnen: g.setStroke(new BasicStroke(2.f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)); g.drawOval(mx - rx, my - ry, 2 * rx, 2 * ry); // Striche fr Pfeil zeichnen: g.setStroke(new BasicStroke(1.f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)); boolean fillArrow = true; if (fillArrow) g.fill(new Polygon(new int[] { px, qlx, qrx }, new int[] { py, qly, qry }, 3)); else { g.drawLine(px, py, qlx, qly); g.drawLine(px, py, qrx, qry); g.drawLine(qlx, qly, qrx, qry); } } g.dispose(); } }
From source file:org.ofbiz.common.CommonEvents.java
public static String getCaptcha(HttpServletRequest request, HttpServletResponse response) { try {// w w w.j a v a 2s. com Delegator delegator = (Delegator) request.getAttribute("delegator"); final String captchaSizeConfigName = StringUtils.defaultIfEmpty(request.getParameter("captchaSize"), "default"); final String captchaSizeConfig = EntityUtilProperties.getPropertyValue("captcha.properties", "captcha." + captchaSizeConfigName, delegator); final String[] captchaSizeConfigs = captchaSizeConfig.split("\\|"); final String captchaCodeId = StringUtils.defaultIfEmpty(request.getParameter("captchaCodeId"), ""); // this is used to uniquely identify in the user session the attribute where the captcha code for the last captcha for the form is stored final int fontSize = Integer.parseInt(captchaSizeConfigs[0]); final int height = Integer.parseInt(captchaSizeConfigs[1]); final int width = Integer.parseInt(captchaSizeConfigs[2]); final int charsToPrint = UtilProperties.getPropertyAsInteger("captcha.properties", "captcha.code_length", 6); final char[] availableChars = EntityUtilProperties .getPropertyValue("captcha.properties", "captcha.characters", delegator).toCharArray(); //It is possible to pass the font size, image width and height with the request as well Color backgroundColor = Color.gray; Color borderColor = Color.DARK_GRAY; Color textColor = Color.ORANGE; Color circleColor = new Color(160, 160, 160); Font textFont = new Font("Arial", Font.PLAIN, fontSize); int circlesToDraw = 6; float horizMargin = 20.0f; double rotationRange = 0.7; // in radians BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D g = (Graphics2D) bufferedImage.getGraphics(); g.setColor(backgroundColor); g.fillRect(0, 0, width, height); //Generating some circles for background noise g.setColor(circleColor); for (int i = 0; i < circlesToDraw; i++) { int circleRadius = (int) (Math.random() * height / 2.0); int circleX = (int) (Math.random() * width - circleRadius); int circleY = (int) (Math.random() * height - circleRadius); g.drawOval(circleX, circleY, circleRadius * 2, circleRadius * 2); } g.setColor(textColor); g.setFont(textFont); FontMetrics fontMetrics = g.getFontMetrics(); int maxAdvance = fontMetrics.getMaxAdvance(); int fontHeight = fontMetrics.getHeight(); String captchaCode = RandomStringUtils.random(6, availableChars); float spaceForLetters = -horizMargin * 2 + width; float spacePerChar = spaceForLetters / (charsToPrint - 1.0f); for (int i = 0; i < captchaCode.length(); i++) { // this is a separate canvas used for the character so that // we can rotate it independently int charWidth = fontMetrics.charWidth(captchaCode.charAt(i)); int charDim = Math.max(maxAdvance, fontHeight); int halfCharDim = (charDim / 2); BufferedImage charImage = new BufferedImage(charDim, charDim, BufferedImage.TYPE_INT_ARGB); Graphics2D charGraphics = charImage.createGraphics(); charGraphics.translate(halfCharDim, halfCharDim); double angle = (Math.random() - 0.5) * rotationRange; charGraphics.transform(AffineTransform.getRotateInstance(angle)); charGraphics.translate(-halfCharDim, -halfCharDim); charGraphics.setColor(textColor); charGraphics.setFont(textFont); int charX = (int) (0.5 * charDim - 0.5 * charWidth); charGraphics.drawString("" + captchaCode.charAt(i), charX, ((charDim - fontMetrics.getAscent()) / 2 + fontMetrics.getAscent())); float x = horizMargin + spacePerChar * (i) - charDim / 2.0f; int y = ((height - charDim) / 2); g.drawImage(charImage, (int) x, y, charDim, charDim, null, null); charGraphics.dispose(); } // Drawing the image border g.setColor(borderColor); g.drawRect(0, 0, width - 1, height - 1); g.dispose(); response.setContentType("image/jpeg"); ImageIO.write(bufferedImage, "jpg", response.getOutputStream()); HttpSession session = request.getSession(); Map<String, String> captchaCodeMap = UtilGenerics.checkMap(session.getAttribute("_CAPTCHA_CODE_")); if (captchaCodeMap == null) { captchaCodeMap = new HashMap<String, String>(); session.setAttribute("_CAPTCHA_CODE_", captchaCodeMap); } captchaCodeMap.put(captchaCodeId, captchaCode); } catch (Exception ioe) { Debug.logError(ioe.getMessage(), module); } return "success"; }