Как установить информацию о DPI в изображении в градациях серого?

Прежде всего, привет и спасибо за возможность.

У меня есть решение, которое сканирует (через собственный источник twain) изображение (или несколько изображений) и сохраняет их в папку в файловой системе.

Мой вопрос: я провел несколько тестов и всегда получал 96 изображений DPI (я использовал ImageIO.write для сохранения изображений, полученных из twain API, в объекте BufferedImage). Затем я увидел ответ Питера Кофлера в stackoverflow по этой ссылке (How установить информацию DPI в изображении?) и работает в цветном и черно-белом режимах (устанавливается из объекта TwainCapability).

Но для моих отсканированных изображений в градациях серого DPI все равно не меняется !!!

Я проверяю это с помощью MS Paint -> Свойства. Когда я сканирую изображение в градациях серого, это всегда 96 точек на дюйм.

Любая идея, как я могу установить DPI в этом случае??

Я устанавливаю DPI, как в примере с Питером Кофлером, следующим образом:

resolutionState = 100;
//or resolutionState = 200;
//or resolutionState = 300;
double dotsPerMilli = resolutionState / 10 / 2.54;

person Rafael Carra    schedule 17.12.2014    source источник
comment
Это изображения jpg или png?   -  person Fildor    schedule 17.12.2014
comment
Я пытаюсь сохранить и обработать изображение PNG. И сделал несколько тестов с BMP (результат тот же). Но это, вероятно, будет иметь такое же поведение с другими типами.   -  person Rafael Carra    schedule 18.12.2014


Ответы (1)


спасибо еще раз заранее.

Я нашел ответ и один из способов сделать это!!!

По следующей ссылке: Как изменить DPI с 96 на 300 изображения в java после изменения размера? "user3603284" опубликовал решение, которое помогло мне это сделать.

Я перешел с png на jpeg (это не имеет значения для спецификаций проекта), и тогда все заработало как шарм !!!

Код:

File imageFile = new File("C:/ScannerOutput/scannerImage" + System.currentTimeMillis() +".jpeg");
FileOutputStream fos = new FileOutputStream(imageFile);
JPEGImageEncoder jpegEncoder = JPEGCodec.createJPEGEncoder(fos);
JPEGEncodeParam jpegEncodeParam = jpegEncoder.getDefaultJPEGEncodeParam(image);
jpegEncodeParam.setDensityUnit(JPEGEncodeParam.DENSITY_UNIT_DOTS_INCH);
jpegEncoder.setJPEGEncodeParam(jpegEncodeParam);
jpegEncodeParam.setQuality(0.75f, false);
jpegEncodeParam.setXDensity(resolutionState); //DPI rate 100, 200 or 300
jpegEncodeParam.setYDensity(resolutionState); //DPI rate 100, 200 or 300
jpegEncoder.encode(image, jpegEncodeParam);
image.flush();
fos.close();

Большое спасибо ТАК, всегда помогает мне =)

person Rafael Carra    schedule 19.12.2014