2016-10-23 14 views
0

Итак, сегодня я начал с нового проекта. Я хочу сделать простой генератор в Java карты высот, так что я попытался следующие:Java: Мой генератор карты высоты записывает только двоичный файл

import java.awt.image.BufferedImage; 
    import java.io.File; 
    import java.io.IOException; 
    import javax.imageio.ImageIO; 

    public class Heightmap { 


    public static int width = 200; 
    public static int height = 200; 

    public static void main(String[] args) { 

     BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY); 
     for(int x = 0; x < width; x++){ 
      for(int y = 0; y < height; y++){ 
       bufferedImage.setRGB(x, y, (byte)(Math.random() * 256 + 128)); // + 128 because byte goes from -128 to 127 
      } 
     } 

     File outputFile = new File("heightmap.png"); 
     try { 
      ImageIO.write(bufferedImage, "png", outputFile); 
     }catch (IOException ioex){ 
      ioex.printStackTrace(); 
     } 
    } 
} 

код очень прост, я планирую попробовать Перлин шума в качестве следующего шага. Но сначала мне нужно решить эту проблему: Generated Heightmap

пикселей в heightmap.png либо полностью белый или полностью черный. На изображении нет серых, что, конечно же, необходимо в карте высот. Кто-нибудь знает, что я сделал неправильно?

Это BufferedImage.TYPE_BYTE_GRAY деталь? Если да, то что я должен использовать вместо этого?

ответ

1

После того, как друг установил меня на правильный трек, я нашел решение.

Вместо BufferedImage.TYPE_BYTE_GRAY Я использовал BufferdImage.TYPE_INT_RGB. Поэтому я действительно ошибаюсь. Также я добавил объект Color randomColor, в котором значения RGB имеют одно и то же целое число со значением от 0 до 255. Затем в BufferedImage.setRGB я использую код цвета randomColor (так что R, G, B = 255 дает #FFFFFF, что белый) в качестве значения пикселя (х, у):

import java.awt.Color; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 
import javax.imageio.ImageIO; 

public class Heightmap { 


public static int width = 200; 
public static int height = 200; 

public static void main(String[] args) { 

    BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 
    for(int x = 0; x < width; x++){ 
     for(int y = 0; y < height; y++){ 
      int randomValue = (int)(Math.random() * 256); 
      Color randomColor = new Color(randomValue, randomValue, randomValue); 

      bufferedImage.setRGB(x, y, randomColor.getRGB()); 
     } 
    } 

    File outputFile = new File("heightmap.png"); 
    try { 
     ImageIO.write(bufferedImage, "png", outputFile); 
    }catch (IOException ioex){ 
     ioex.printStackTrace(); 
    } 




} 

}

Теперь heightmap.png дает то, что я ожидал: Heightmap.png