gpt4 book ai didi

java - Java 中的打印 - Printable.print() 调整图像大小

转载 作者:行者123 更新时间:2023-12-01 05:31:50 24 4
gpt4 key购买 nike

我有一个通过 Graphics2D 绘制的自定义报告,并使用大量微小的 BufferedImage Sprite 。 PrinterJob.print() 似乎为每个 Sprite 大约调用一次 Printable.print() (实际计数可能会有所不同),因此某些页面会重新渲染150 次...这导致打印速度慢得令人无法接受,两页大约需要 10 秒。

我发现了这个:Why does the java Printable's print method get called multiple times with the same page number?

但它似乎没有解释我的特定问题(或仅部分解释它)。我创建了一个测试报告,其中只有几个 Sprite ,并且当我在垂直轴或水平轴上添加和删除图像时,有少量的上下调整大小。

当使用 Bullzip 打印到 PDF 时,我注意到放大图像后,它们会使用双线性或双三次算法进行放大。其中一张图像的独特之处在于具有索引调色板,似乎没有缩放。我通过打印到真实打印机并观察缩放与未缩放的相同图像来确认缩放是一种 Java 行为,而不是由 Bullzip 执行的。

因此,让我印象深刻的是,打印 API 试图将图像重新调整为它想要的任何 DPI,但由于某种原因,它每次遇到它认为的图像时都会调用 Printable.print()因为需要这种治疗。

如何解决此问题?我尝试在调用 Printable.print() 时得到的 Graphics2D 设置渲染提示,但无济于事。除了尝试查找和检查打印 API 的源代码之外,我不知道还能做什么。

最佳答案

我想我只是偶然想到的。我刚刚修改的报告现在在某些几何体上绘制图像,我注意到图像框后面的几何体部分正在被光栅化,与框外相比看起来很模糊。相关图像(以及除一张索引彩色图像之外的所有图像)具有 8 位 Alpha channel 。

我之前注意到 Java 的打印光栅化器不喜欢半透明的东西(一份使用它的报告在我认为 300dpi 下完全光栅化......),但我忘记了这些图像也有 Alpha channel 。

当我有机会时,我可能会通过进一步提高图像分辨率并使用 1 位 Alpha 来解决这个问题。当缩小屏幕观看时,它会再次出现一些 Alpha,看起来还不错。

关于java - Java 中的打印 - Printable.print() 调整图像大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8856205/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com