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();
}
}
}
Код очень прост, я планирую попробовать перлин шум в качестве следующего шага. Но сначала мне нужно решить эту проблему: сгенерированная карта высот
Пиксели в 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, которое является белым) в качестве значения пикселя (x, y):
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