2014-12-17 2 views
1

Прежде всего, привет и спасибо за возможность.Как установить информацию DPI в полутоновом изображении?

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

Мой вопрос: Я провел несколько тестов, и у меня всегда было 96 изображений DPI (я использовал ImageIO.write для сохранения изображений, полученных из twain API в объекте BufferedImage). Than, я видел ответ Питера Кофлера в stackoverflow по этой ссылке (How to set DPI information in an image?), и он работает в цветном и черном & Белые ситуации (настроенные из объекта TwainCapability).

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

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

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

я устанавливаю DPI, как пример, Питер Kofler как это:

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

является то, что JPG изображения или PNG? – Fildor

+0

Я пытаюсь сохранить и манипулировать PNG-изображением. И сделал несколько тестов с BMP (с тем же результатом). Но, вероятно, он будет иметь такое же поведение с другими типами. –

ответ

0

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

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

В следующей ссылке: How to change the DPI from 96 to 300 of an image in java after resizing? «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(); 

Благодаря очень С.О., всегда помогает мне =)

Смежные вопросы