0

我在使用 Grapics2D API 时遇到问题,我正在尝试重新调整图像的大小,但不是获得较小的图像,而是显示半白色和半灰色区域。我究竟做错了什么?我尝试了使用和不使用渲染提示但它没有工作,或者是否有另一种方法可以给我一个指定大小的新缓冲图像对象?

//height = 400, width = 600, capture_rect = screen size
BufferedImage img = robot.createScreenCapture(CAPTURE_RECT);
BufferedImage resized = new BufferedImage(WIDTH, HEIGHT, img.getType());
Graphics2D g = resized.createGraphics();
g.drawImage(img, 0, 0, WIDTH, HEIGHT, 0, 0, img.getWidth(), img.getHeight(), null);
g.dispose();
setImage(resized);
4

1 回答 1

2

请参阅有关Image.getScaledImage 的风险的文章。它有一些建议。

这是它推荐的一些代码:

private float xScaleFactor, yScaleFactor = ...;
private BufferedImage originalImage = ...;

public void paintComponent(Graphics g) {
    Graphics2D g2 = (Graphics2D)g;
    int newW = (int)(originalImage.getWidth() * xScaleFactor);
    int newH = (int)(originalImage.getHeight() * yScaleFactor);
    g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
                        RenderingHints.VALUE_INTERPOLATION_BILINEAR);
    g2.drawImage(originalImage, 0, 0, newW, newH, null);
}

看起来您只需要指定新的宽度/高度,它就会自动为您进行缩放。

或者问题可能出在 img.getType() 方法上。您应该能够使用:

BufferedImage.TYPE_INT_RGB // (or ARGB)

看看哪个效果最好。

于 2013-04-21T23:31:55.023 回答