我遇到了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);
答案 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)
查看最佳效果。