public void drawTileNumC(int tileNum, int x, int y, Color c, Graphics g) { BufferedImage coloredTile = tiles[tileNum]; for (int i = 0; i < this.tW; i++) { for (int j = 0; j < this.tH; j++) { Color originalColor = new Color(coloredTile.getRGB(i, j), true); Color nc = new Color(c.getRed(), c.getGreen(), c.getBlue(), originalColor.getAlpha()); coloredTile.setRGB(i, j, nc.getRGB()); } } g.drawImage(tiles[tileNum], x, y, null); }
/** * Returns the red value of the image at the given coordinates. * * <p>The coordinates should be non-negative and less than the width (x) or height (y) of the * image. The red value is returned as an integer in the range [0,255]. * * @param x the horizontal coordinate of the pixel * @param y the vertical coordinate of the pixel * @return the red value at the given coordinates */ public int getRed(int x, int y) { // works! Color c = new Color(img.getRGB(x, y)); return c.getRed(); // (img.getRGB(x, y) & 0x00ff0000) >> 16; }
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"); }