Java缩放图像创建半白色半灰色图像

时间:2013-04-21 23:04:14

标签: java image bufferedimage graphics2d

我遇到了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);

1 个答案:

答案 0 :(得分:2)

请参阅Perils of 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)

查看最佳效果。