java - 如何设置灰度图像的DPI信息?

标签 java image dpi twain scanning

首先,您好,感谢您给我这个机会。

我有一个解决方案,可以扫描(通过 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/

相关文章:

java - 移除 fragment 崩溃

c# - 如何编写自动缩放到系统字体和 dpi 设置的 WinForms 代码?

java - 发送原始 RIL 请求

java - 此代码中的内存泄漏?

java - Java中如何知道类来自哪里

css - 如何缩放容器内的图像

c - 将图像保存到缓冲区

html - 移动设备上的图库

java - 分辨率不同于 72dpi 的 JasperReports

winapi - 在支持 Windows 8.1 的应用程序上缩放非客户区以支持每个监视器的高 DPI