У меня есть оттенок серого 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?
Спасибо.
Почему вы преобразовываете изображение в оттенках серого в полутоновое изображение? Что говорят getType и getColorModel на исходной карте? – john16384
Поскольку при загрузке изображения (PNG) он загружается как тип 0 (TYPE_CUSTOM) и с помощью ColorModel: #pixelBits = 32 numComponents = 2 color space = [email protected] transparent = 3 имеет alpha = true isAlphaPre = false. –