Java2D:扩展问题

Joh*_*han 8 java scaling java-2d

我是一位经验丰富的Java程序员,但对Java2D来说相对较新.我正在尝试缩放图像但我的质量结果质量很差.图像是面板的预览,因此包含文本和文本字段等内容.我将永远缩小规模,永不升级.

目前我正在使用以下代码: -

g.drawImage(panelImage, 0, 0, scaledWidth, scaledHeight, null);
Run Code Online (Sandbox Code Playgroud)

其中panelImage是全尺寸预览(BufferedImage),scaledWidth和scaledHeight是相应的目标尺寸.我似乎在文本和文本字段等边缘丢失了很多细节.

我应该使用更好的电话来缩放图像吗?

谢谢,约翰

coo*_*ird 11

我可以提出的建议是首先将图像调整为单独的大小BufferedImage.原因在于,可以获得Graphics2D对象BufferedImage以便产生更好质量的缩放图像.

Graphics2D可以接受"渲染提示",它指示Graphics2D对象应该执行图像处理的方式.该setRenderingHint方法是可用于设置那些渲染提示的方法之一.RenderingHints可以使用类中的呈现提示.

然后,使用该Graphics2D对象,可以BufferedImage使用之前指定的渲染提示将图像绘制到该对象.

粗略(未经测试)的代码可以如下工作:

BufferedImage scaledImage = new BufferedImage(
    scaledWidth,
    scaledHeight,
    BufferedImage.TYPE_INT_RGB
);

Graphics2D g = scaledImage.createGraphics();
g.setRenderingHints(
    RenderingHints.Key.KEY_INTERPOLATION,
    RenderingHints.VALUE_INTERPOLATION_BICUBIC
);

g.drawImage(panelImage, 0, 0, scaledWidth, scaledHeight, null);
g.dispose();
Run Code Online (Sandbox Code Playgroud)

其他感兴趣的渲染提示可能包括:

" Java教程"的" 控制渲染质量"部分还提供了有关如何控制Graphics2D对象渲染质量的更多信息.

有关处理图形界面的非常好的信息来源,强烈建议使用Chet Haase和Romain Guy的Filthy Rich Clients.本书的一部分涉及缩放图像的问题,这似乎非常相关.