BufferedImage颜色饱和度
我正在使用jfreesane和Apache PDFBox编写一个简单的扫描应用程序。
这是扫描码:
InetAddress address = InetAddress.getByName("192.168.0.17"); SaneSession session = SaneSession.withRemoteSane(address); List devices = session.listDevices(); SaneDevice device = devices.get(0); device.open(); device.getOption("resolution").setIntegerValue(300); BufferedImage bimg = device.acquireImage(); File file = new File("test_scan.png"); ImageIO.write(bimg, "png", file); device.close();
并制作PDF:
PDDocument document = new PDDocument(); float width = bimg.getWidth(); float height = bimg.getHeight(); PDPage page = new PDPage(new PDRectangle(width, height)); document.addPage(page); PDImageXObject pdimg = LosslessFactory.createFromImage(document, bimg); PDPageContentStream stream = new PDPageContentStream(document, page, PDPageContentStream.AppendMode.APPEND, true); stream.drawImage(pdimg, 0, 0); stream.close(); document.save(filename); document.close();
这是结果:
你可以看到PDF图像更“苍白”(饱和度? – 对不起,我不擅长色彩理论,也不知道如何正确命名)。
我发现了什么:
- 使用JLabel(新的ImageIcon(bimg))构造函数将BufferedImage打印到JLabel会产生与PDF相同的结果(“苍白”颜色),所以我猜PDFBox不是原因。
- 更改扫描分辨率 – 无效。
- bimg.getTransparency()返回1(OPAQUE)
- bimg.getType()返回0(TYPE_CUSTOM)
PNG文件:
http://s000.tinyupload.com/index.php?file_id=95648202713651192395
PDF文件
http://s000.tinyupload.com/index.php?file_id=90369236997064329368
JFreeSane中存在颜色空间的问题,它在版本0.97中得到修复:
https://github.com/sjamesr/jfreesane/releases/tag/jfreesane-0.97
- 如何在Java / Groovy中将InputStream转换为BufferedImage?
- 在BufferedImage的int 像素数组中工作
- 如何在JScrollPane中获取图像的X和Y位置
- BufferedImage意外地改变了颜色
- java.lang.IllegalArgumentException:input == null! 使用ImageIO.read将图像加载为bufferedImage时
- 更改BufferedImage的内容,然后更新JFrame以反映它
- Java – 红色,绿色,蓝色到getRGB
- 在java中的套接字上发送屏幕截图(bufferedImage)
- 在BufferedImage中绘制多条线