2014-01-03 5 views
0

Я пытаюсь сделать программу на Java, которая использует шум Perlin, чтобы сделать черно-белую карту высоты. Я попытался использовать код от http://freespace.virgin.net/hugo.elias/models/m_perlin.htm для реализации шума. Я использовал приведенный ниже код, чтобы заставить шум сделать карту высот, но я получаю что-то вроде http://www.filterforge.com/images/version3/script-api/z-animated-perlin.jpg вместо получения карты высоты.height map related issue

BufferedImage img; 
img = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB); 

int[] pixel = ((DataBufferInt)img.getRaster().getDataBuffer()).getData(); 

for(int i = 0; i < (WIDTH*HEIGHT); i++) 
{ 
    pixel[i] = (int) perlin.PerlinNoise(i, i); 
} 
+0

Почему вы используете RGB изображение, если вам нужен только оттенки серого (= * hight-map *)? – halirutan

+0

Я не мог найти способ нарисовать изображение, если оно было TYPE_BYTE_GRAY или TYPE_USHORT_GRAY. –

ответ

2

Вы можете использовать BufferedImage.TYPE_BYTE_GRAY следующим образом: Создание вам шумовой-массив типа int[] где число в массиве должно быть между [0,255]. Давайте предположим, что этот пиксельный массив называется pixelData, то должно работать

BufferedImage img = new BufferedImage(WIDTH, HEIGHT, 
            BufferedImage.TYPE_BYTE_GRAY); 
img.getRaster().setPixels(0, 0, WIDTH, HEIGHT, pixelData); 

File output = new File("image.jpg"); 
try { 
    ImageIO.write(img, "jpg", output); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

Если вы хотите иметь полный пример, то, пожалуйста, посмотрите на следующий вопрос: Issue with Perlin Noise in Java

+0

Является ли перестановка [] просто случайным значением для каждой точки, которую вы составили для шума, или они должны быть этими значениями? –

+0

Вы имеете в виду связанную * проблему с Perlin Noise в Java * post? Это не мой код! Это стандартная реализация Перлина и, честно говоря, я не знаю ответа. Вы должны прочитать публикацию. – halirutan