首先,您好,感谢您给我这个机会。
我有一个解决方案,可以扫描(通过 native twain 源)图像(或许多图像)并将它们保存到文件系统中的文件夹中。
我的问题是:我做了一些测试,我总是得到 96 的图像 DPI(我使用 ImageIO.write 将来自 twain API 的图像保存在 BufferedImage 对象中)。 然后,我在 stackoverflow 中的这个链接(How to set DPI information in an image?)中看到了 Peter Kofler 的答案,它适用于彩色和黑白情况(从 TwainCapability 对象设置)。
但是,对于我扫描的灰度图像,DPI 无论如何都不会改变!!!
我正在使用 MS Paint -> Properties 来验证它。当我扫描灰度图像时,它始终为 96 DPI。
知道在这种情况下如何设置 DPI 吗?
我正在设置 DPI,就像 Peter Kofler 的示例一样:
resolutionState = 100;
//or resolutionState = 200;
//or resolutionState = 300;
double dotsPerMilli = resolutionState / 10 / 2.54;
最佳答案
再次感谢您。
我找到了答案和一种方法!!!
在以下链接中: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();
非常感谢,总是帮助我=)
关于java - 如何设置灰度图像的DPI信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27533810/