首先,您好,谢谢您的机会。
我有一个解决方案,扫描(通过原生twain源)一个图像(或许多图像)并将它们保存到文件系统的文件夹中。
我的问题是:我做了一些测试,我总是得到一个96图像DPI(我使用ImageIO.write来保存来自BufferedImage对象中的twain API的图像)。 比,我在这个链接(How to set DPI information in an image?)中看到了Peter Kofler在stackoverflow中的答案,它在有色和黑色&白色情况(从TwainCapability对象设置)。
但是,对于我扫描的灰度图像,DPI无论如何都不会改变!!!
我正在使用MS Paint进行验证 - >属性。当我扫描灰度图像时,它总是96 DPI。
知道如何在这种情况下设置DPI吗?
我设置了DPI,就像Peter Kofler的例子一样:
resolutionState = 100;
//or resolutionState = 200;
//or resolutionState = 300;
double dotsPerMilli = resolutionState / 10 / 2.54;
答案 0 :(得分: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();
非常感谢,总是帮助我=)