Java:我的高度图生成器只写二进制文件

时间:2016-10-23 16:15:10

标签: java random png terrain heightmap

所以今天我开始了一个新项目。我想在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部分吗?如果是这样,我应该使用什么呢?

1 个答案:

答案 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