/** * Writes the <code>shape</code>, <code>coords</code>, <code>href</code>, * <code>nohref</code> Attribute for the specified figure and ellipse. * * @return Returns true, if the circle is inside of the image bounds. */ private boolean writeCircleAttributes(IXMLElement elem, SVGFigure f, Ellipse2D.Double ellipse) { AffineTransform t = TRANSFORM.getClone(f); if (t == null) { t = drawingTransform; } else { t.preConcatenate(drawingTransform); } if ((t.getType() & (AffineTransform.TYPE_UNIFORM_SCALE | AffineTransform.TYPE_TRANSLATION)) == t.getType() && ellipse.width == ellipse.height ) { Point2D.Double start = new Point2D.Double(ellipse.x, ellipse.y); Point2D.Double end = new Point2D.Double(ellipse.x + ellipse.width, ellipse.y + ellipse.height); t.transform(start, start); t.transform(end, end); ellipse.x = Math.min(start.x, end.x); ellipse.y = Math.min(start.y, end.y); ellipse.width = Math.abs(start.x - end.x); ellipse.height = Math.abs(start.y - end.y); elem.setAttribute("shape", "circle"); elem.setAttribute("coords", (int) (ellipse.x + ellipse.width / 2d)+","+ (int) (ellipse.y + ellipse.height / 2d)+","+ (int) (ellipse.width / 2d) ); writeHrefAttribute(elem, f); return bounds.intersects(ellipse.getBounds()); } else { return writePolyAttributes(elem, f, (Shape) ellipse); } }
/** *****************************Connected Component Recursive ***************************** */ void connect(int y, int x) { if (conect_output[y][x] == 0) { conect_output[y][x] = 175; obj_size++; // System.out.println("Size :" +obj_size); s = x + 1; t = y; if (boundary_check(t, s) && (Math.abs(conect_input[t][s] - intensity) < 20)) { // conect_output[s][t] = 175; connect(t, s); } s = x; t = y - 1; if (boundary_check(t, s) && (Math.abs(conect_input[t][s] - intensity) < 20)) { // conect_output[s][t] = 175; connect(t, s); } s = x + 1; t = y - 1; if (boundary_check(t, s) && (Math.abs(conect_input[t][s] - intensity) < 20)) { // conect_output[s][t] = 175; connect(t, s); } s = x + 1; t = y + 1; if (boundary_check(t, s) && (Math.abs(conect_input[t][s] - intensity) < 20)) { // conect_output[s][t] = 175; connect(t, s); } s = x - 1; t = y - 1; if (boundary_check(t, s) && (Math.abs(conect_input[t][s] - intensity) < 20)) { // conect_output[s][t] = 175; connect(t, s); } s = x - 1; t = y + 1; if (boundary_check(t, s) && (Math.abs(conect_input[t][s] - intensity) < 20)) { // conect_output[s][t] = 175; connect(t, s); } s = x + 1; t = y; if (boundary_check(t, s) && (Math.abs(conect_input[t][s] - intensity) < 20)) { // conect_output[s][t] = 175; connect(t, s); } s = x - 1; t = y; if (boundary_check(t, s) && (Math.abs(conect_input[t][s] - intensity) < 20)) { // conect_output[s][t] = 175; connect(t, s); } } }
public static ArthurImage multiply( ArthurImage one, ArthurNumber two) { // change to ArthurNumber later double f = Math.abs(two.val); // get image BufferedImage image = JavaImageMath.clone(one.bf); // manipulate image WritableRaster raster = image.getRaster(); int width = (int) (raster.getWidth() * f); int height = (int) (raster.getHeight() * f); BufferedImage collage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D g2d = collage.createGraphics(); g2d.drawImage(image, 0, 0, width, height, null); g2d.dispose(); // save image String outputFn = one.filename.substring(0, one.filename.indexOf(".jpg")) + "X" + // filename can't contain the / or *characters; decide later f + counter + ".jpg"; counter++; return new ArthurImage(collage, outputFn); }
protected void drawImageMosaic(Graphics2D g2) { // Break the image up into tiles. Draw each // tile with its own transparency, allowing // the background to show through to varying // degrees. int side = 36; int width = mImage.getWidth(); int height = mImage.getHeight(); for (int y = 0; y < height; y += side) { for (int x = 0; x < width; x += side) { // Calculate an appropriate transparency value. float xBias = (float) x / (float) width; float yBias = (float) y / (float) height; float alpha = 1.0f - Math.abs(xBias - yBias); g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha)); // Draw the subimage. int w = Math.min(side, width - x); int h = Math.min(side, height - y); BufferedImage tile = mImage.getSubimage(x, y, w, h); g2.drawImage(tile, x, y, null); } } // Reset the composite. g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER)); }
/** * All other write methods delegate their work to here. */ public void write(OutputStream out, java.util.List<Figure> figures) throws IOException { Rectangle2D.Double drawingRect = null; for (Figure f : figures) { if (drawingRect == null) { drawingRect = f.getBounds(); } else { drawingRect.add(f.getBounds()); } } AffineTransform drawingTransform = new AffineTransform(); drawingTransform.translate( -Math.min(0, drawingRect.x), -Math.min(0, drawingRect.y) ); write(out, figures, drawingTransform, new Dimension( (int) (Math.abs(drawingRect.x) + drawingRect.width), (int) (Math.abs(drawingRect.y) + drawingRect.height)) ); }
/** * Writes the <code>shape</code>, <code>coords</code>, <code>href</code>, * <code>nohref</code> Attribute for the specified figure and rectangle. * * @return Returns true, if the rect is inside of the image bounds. */ private boolean writeRectAttributes(IXMLElement elem, SVGFigure f, Rectangle2D.Double rect) { AffineTransform t = TRANSFORM.getClone(f); if (t == null) { t = drawingTransform; } else { t.preConcatenate(drawingTransform); } if ((t.getType() & (AffineTransform.TYPE_UNIFORM_SCALE | AffineTransform.TYPE_TRANSLATION)) == t.getType() ) { Point2D.Double start = new Point2D.Double(rect.x, rect.y); Point2D.Double end = new Point2D.Double(rect.x + rect.width, rect.y + rect.height); t.transform(start, start); t.transform(end, end); Rectangle r = new Rectangle( (int) Math.min(start.x, end.x), (int) Math.min(start.y, end.y), (int) Math.abs(start.x - end.x), (int) Math.abs(start.y - end.y) ); elem.setAttribute("shape", "rect"); elem.setAttribute("coords", r.x + ","+ r.y + ","+ (r.x + r.width) + ","+ (r.y + r.height) ); writeHrefAttribute(elem, f); return bounds.intersects(r); } else { return writePolyAttributes(elem, f, (Shape) rect); } }
public static ArthurImage divide( ArthurImage one, ArthurNumber two) { // change to ArthurNumber later int f = Math.abs(two.intval()); // get image BufferedImage image = JavaImageMath.clone(one.bf); // manipulate image WritableRaster raster = image.getRaster(); int width0 = raster.getWidth(); int height0 = raster.getHeight(); int width = width0 / f; int height = height0 / f; BufferedImage temp = new BufferedImage(width * f, height * f, BufferedImage.TYPE_INT_RGB); Graphics2D g2d = temp.createGraphics(); for (int i = 0; i < f; i++) { for (int j = 0; j < f; j++) { g2d.drawImage(image, j * width, i * height, width, height, null); } } g2d.dispose(); BufferedImage collage = new BufferedImage(width0, height0, BufferedImage.TYPE_INT_RGB); g2d = collage.createGraphics(); g2d.drawImage(temp, 0, 0, width0, height0, null); g2d.dispose(); // save image String outputFn = one.filename.substring(0, one.filename.indexOf(".jpg")) + "D" + // filename can't contain the / or *characters; decide later f + counter + ".jpg"; counter++; return new ArthurImage(collage, outputFn); }
public GroundTexture(int size, Ground grnd) { System.out.println("Calculating Ground Texture..."); img = new BufferedImage(size, size, BufferedImage.TYPE_INT_RGB); double r, g, b; Random rnd = new Random(); System.out.print("Initializing..."); for (int x = 0; x < size; x++) { for (int y = 0; y < size; y++) { double slope = 0; for (int nx = x - 1; nx < x + 1; nx++) for (int ny = y - 1; ny < y + 1; ny++) if ((nx >= 0) && (nx < size)) if ((ny >= 0) && (ny < size)) slope += Math.abs(grnd.topo[nx][ny] - grnd.topo[x][y]); if (slope < 1) slope = 1; g = 5d + 80d / (grnd.topo[x][y] / 2000d + 1d) + rnd.nextDouble() * 30d / (slope); r = g * (1.17 + (-.3 + (rnd.nextDouble() * .3)) / (grnd.topo[x][y] / 200d + 1d) / (slope / 5 + 1)); b = r * (.7 + (-.3 + (rnd.nextDouble() * .2)) / (grnd.topo[x][y] / 200d + 1d) / (slope / 5 + 1)); img.setRGB(x, y, colorRGB((int) r, (int) g, (int) b)); } } /**/ // save("bodentextur2","png"); System.out.print(" \rRandom Growth"); for (int i = 0; i < size * size * 8; i++) { if (i % (size * size / 2) == 0) System.out.print("."); int x = 3 + rnd.nextInt(size - 6); int y = 3 + rnd.nextInt(size - 6); int nx = x - 1 + rnd.nextInt(3); int ny = y - 1 + rnd.nextInt(3); while ((nx < 0) || (nx >= size) || (ny < 0) || (ny >= size)) { nx = x - 1 + rnd.nextInt(3); ny = y - 1 + rnd.nextInt(3); } Color dis = getColorAt(x, y); Color col = getColorAt(nx, ny); if (grnd.topo[nx][ny] >= 4.5) if (col.getGreen() / col.getRed() > dis.getGreen() / dis.getRed()) if (Math.abs(grnd.topo[x][y] - grnd.topo[nx][ny]) < .65) { int c = colorRGB(col.getRed(), col.getGreen(), col.getBlue()); // img.setRGB(x,y, colorRGB(col.getRed(), col.getGreen(), col.getBlue())); // img.setRGB(x-1+rnd.nextInt(3),y-1+rnd.nextInt(3), colorRGB(col.getRed(), // col.getGreen(), col.getBlue())); for (nx = x - 1 - rnd.nextInt(3); nx < 1 + x + rnd.nextInt(3); nx++) for (ny = y - 1 - rnd.nextInt(3); ny < y + 1 + rnd.nextInt(3); ny++) { img.setRGB(nx, ny, c); grnd.topo[nx][ny] += 1.8; } } } System.out.print(" \rAntialiasing..."); /* for (int x = 0; x < size; x++){ for (int y = 0; y < size; y++){ double sumr = 0; double sumg = 0; double sumb = 0; double div = 0; for (int nx=x-1;nx<x+1;nx++) for (int ny=y-1;ny<y+1;ny++) if ((nx>=0) && (nx < size)) if ((ny>=0) && (ny < size)) { Color col = getColorAt(nx,ny); sumr+=col.getRed(); sumg+=col.getGreen(); sumb+=col.getBlue(); div++; } r=sumr/div; g=sumg/div; b=sumb/div; img.setRGB(x,y, colorRGB((int)r, (int)g, (int)b) ); } }*/ System.out.print(" \r"); // save("bodentextur3","png"); save("bodentextur", "png"); }