2017-02-11 47 views
0

У меня есть оттенок серого height map, который я создал в Photoshop, и мне нужно передать его в программу Java для обработки. Я загружая его с помощью ImageIO.read (...) метод, а затем преобразовать его в оттенках серого с этим кодом:
Неверные значения оттенков серого из Java BufferedImage Raster

BufferedImage map = ImageIO.read(new File(...)); 
BufferedImage heightMap = new BufferedImage(map.getWidth(), map.getHeight(), BufferedImage.TYPE_BYTE_GRAY); 
heightMap.getGraphics().drawImage(map, 0, 0, null); 
heightMap.getGraphics().dispose(); 

В Photoshop, пиксел (0,0) имеет значение 17 . когда я использую heightMap.getData().getSample(0, 0, 0) или ((byte[])(heightMap.getRaster().getDataElements(0, 0, null)))[0] & 0xff, я получаю значение 64.

Интересно, что когда я бегу map.getRGB(0, 0)>>16&0xFF, я также получаю значение 64.

Как это исправить и получить значение 17?

Спасибо.

+0

Почему вы преобразовываете изображение в оттенках серого в полутоновое изображение? Что говорят getType и getColorModel на исходной карте? – john16384

+0

Поскольку при загрузке изображения (PNG) он загружается как тип 0 (TYPE_CUSTOM) и с помощью ColorModel: #pixelBits = 32 numComponents = 2 color space = [email protected] transparent = 3 имеет alpha = true isAlphaPre = false. –

ответ

0

Причиной этой проблемы был формат файла (PNG). В Photoshop у меня был режим холста, установленный в оттенки серого и 8 бит/канал. После завершения, я сохранил карту изображения/высоты в качестве PNG, из-за чего Java загрузило изображение как тип или TYPE_CUSTOM и вызвало преобразование оттенков серого, что должно быть связано с прозрачностью.

Сохранение изображения в формате JPEG из Java загрузить файл непосредственно в оттенках серого (TYPE_BYTE_GRAY) и оба map.getData().getSample(0, 0, 0) и ((byte[])(map.getRaster().getDataElements(0, 0, null)))[0] & 0xff возвращается значение 13. не является идеальным значением, но намного лучше, чем 64.

PS : Как и ожидалось, на этот раз map.getRGB(0, 0)>>16&0xFF вернули неправильное значение 64.