所以今天我开始了一个新项目。我想在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();
}
}
}
代码很简单,我打算在下一步尝试使用perlin噪音。但首先我需要解决这个问题: Generated Heightmap
heightmap.png 中的像素要么全白,要么全黑。图像中没有灰色,当然在高度图中是必需的。有谁知道我做错了什么?
是BufferedImage.TYPE_BYTE_GRAY
部分吗?如果是这样,我应该使用什么呢?
答案 0 :(得分: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