2014-12-17 8 views
1

우선, 안녕하세요. 기회에 감사드립니다.DPI 정보를 그레이 스케일 이미지로 설정하는 방법은 무엇입니까?

이미지 (또는 많은 이미지)를 스캔하여 파일 시스템의 폴더에 저장하는 솔루션이 있습니다.

내 질문에 : 나는 몇 가지 테스트를했고, 나는 항상 BufferedImage 객체의 twain API에서 가져온 이미지를 저장하기 위해 ImageIO.write를 사용하여 96 이미지 DPI를 얻었다. 이상, 나는이 링크 (How to set DPI information in an image?)에서 stackoverflow의 Peter Kofler의 답변을 보았고 Colour and Black & 흰색 상황 (TwainCapability 객체에서 설정)에서 작동합니다.

그러나 스캔 한 회색 음영 이미지의 경우 DPI가 변경되지 않습니다 !!!

MS Paint -> Properties를 사용하여 확인하고 있습니다. 그레이 스케일 이미지를 스캔 할 때는 항상 96 DPI입니다.

이 경우 어떻게 DPI를 설정할 수 있습니까?

나는이 같은 피터 Kofler가 예처럼 DPI 설정 해요 :

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(); 

감사합니다 아주 많이 SO, 항상 저를 도와 =)