我对2d图形有疑问。我目前正在使用它来调整缓冲图像的大小。我也有一种方法可以在图像上创建一个黄色的100x100正方形,如下所示:
BufferedImage image = ImageIO.read("filepath");
int startx = 0, starty = 0;
for (int r = 0; r < 100; r++) {
for (int c = 0; c < 100; c++) {
image.setRGB(startx + c, starty + r, Color.YELLOW.getRGB());
}
}
这可以正常工作,如果我不调整bufferedimage的大小。但是,调整大小后,会发生一些奇怪的事情:如果startx = 0,而starty = 0,则它可以正常工作。但是随着它们都接近更大的数量,所产生的正方形的尺寸会缩小。就我的蛮力实验(手动增加startx,starty)而言,我已经注意到平方太小,无法在startx = 95,starty = 95时注意到。
我通过将图像添加到添加到jframe内容面板的jlabel中来显示图像。与此行:
frame.getContentPane().add(new JLabel(new ImageIcon(resize(image, width, height))));
这是resize(image)的实现:
private BufferedImage resize(BufferedImage img, int newW, int newH) {
Image tmp = img.getScaledInstance(newW, newH, Image.SCALE_SMOOTH);
BufferedImage dimg = new BufferedImage(newW, newH, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = dimg.createGraphics();
g2d.drawImage(tmp, 0, 0, null);
g2d.dispose();
return dimg;
}
(我将此实现从互联网上的某个地方撤出,我不记得确切的位置,很可能是这个站点)
如果我用这条线将图像添加到框架中,则不会观察到效果:
frame.getContentPane().add(new JLabel(new ImageIcon(image)));
因此,我知道这是由于调整大小用法而发生的。有经验的程序员能否请我解释一下发生了什么。
谢谢!