Java:My height map generator只写二进制代码
所以今天我开始了一个新项目。我想用java制作一个简单的heightmap生成器,因此我尝试了以下方法:Java:My height map generator只写二进制代码,java,random,png,terrain,heightmap,Java,Random,Png,Terrain,Heightmap,所以今天我开始了一个新项目。我想用java制作一个简单的heightmap生成器,因此我尝试了以下方法: 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
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();
}
}
}
导入java.awt.image.buffereImage;
导入java.io.File;
导入java.io.IOException;
导入javax.imageio.imageio;
公共类高度图{
公共静态整数宽度=200;
公共静态内部高度=200;
公共静态void main(字符串[]args){
BuffereImage BuffereImage=新的BuffereImage(宽度、高度、BuffereImage.TYPE\u字节\u灰度);
对于(int x=0;x
代码非常简单,我计划下一步尝试柏林噪声。但首先我需要解决这个问题:
heightmap.png中的像素要么完全为白色,要么完全为黑色。图像中没有灰度,这在高度贴图中当然是必要的。有人知道我做错了什么吗
它是
buffereImage.TYPE\u BYTE\u GRAY
部分吗?如果是这样,我应该用什么来代替呢?在一位朋友让我走上正确的道路后,我找到了解决办法
我使用了BufferdImage.TYPE\u BYTE\u GRAY
而不是BufferedImage.TYPE\u INT\u RGB
。所以这确实是我错的地方。此外,我还添加了对象Color randomColor
,其中RGB值都共享同一个整数,其值从0到255。然后在BufferedImage.setRGB
中,我使用randomColor的颜色代码(因此R,G,B=255给出#FFFFFF,白色)作为像素(x,y)的值:
导入java.awt.Color;
导入java.awt.image.buffereImage;
导入java.io.File;
导入java.io.IOException;
导入javax.imageio.imageio;
公共类高度图{
公共静态整数宽度=200;
公共静态内部高度=200;
公共静态void main(字符串[]args){
BuffereImage BuffereImage=新的BuffereImage(宽度、高度、BuffereImage.TYPE_INT_RGB);
对于(int x=0;x
}
现在heightmap.png给出了我所期望的:
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();
}
}