为什么在Java中用Graphics.drawImage()显示的图像不像我画的那样
Why is an image displayed with Graphics.drawImage() in Java not like I drew it
我有存储 .png 图像 (320 x 240) 的 BufferedImage,我用 Graphics.drawImage()
在 Сanvas 上绘制它。但是如果你仔细观察,例如,3 x 3 像素的十字实际上是 4 x 3 像素。看看我在图片中的问题:enter image description here
GameContainer 渲染方法:
public void render() {
bs = window.canvas.getBufferStrategy();
if (bs == null) {
window.canvas.createBufferStrategy(3);
return;
}
g = (Graphics2D) bs.getDrawGraphics();
gm.render(g);
g.dispose();
bs.show();
}
GameManager 渲染方法:
public void render(Graphics2D g) {
b.render(g);
}
后台渲染方式:
public void render(Graphics2D g) {
g.drawImage(image, 0, 0 , null);
}
您可能正在使用 drawImage() 的重载之一来缩放图像以适合特定区域。你可以在这里看看:
https://docs.oracle.com/javase/tutorial/2d/images/drawimage.html
以下段落:
例如,以下 drawImage() 方法的重载使您能够绘制指定图像的指定区域(当前可用的区域),缩放它以适应目标可绘制表面的指定区域内:
布尔值Graphics.drawImage(图片img,
int dstx1, int dsty1, int dstx2, int dsty2,
int srcx1, int srcy1, int srcx2, int srcy2,
ImageObserver 观察者);
我有存储 .png 图像 (320 x 240) 的 BufferedImage,我用 Graphics.drawImage()
在 Сanvas 上绘制它。但是如果你仔细观察,例如,3 x 3 像素的十字实际上是 4 x 3 像素。看看我在图片中的问题:enter image description here
GameContainer 渲染方法:
public void render() {
bs = window.canvas.getBufferStrategy();
if (bs == null) {
window.canvas.createBufferStrategy(3);
return;
}
g = (Graphics2D) bs.getDrawGraphics();
gm.render(g);
g.dispose();
bs.show();
}
GameManager 渲染方法:
public void render(Graphics2D g) {
b.render(g);
}
后台渲染方式:
public void render(Graphics2D g) {
g.drawImage(image, 0, 0 , null);
}
您可能正在使用 drawImage() 的重载之一来缩放图像以适合特定区域。你可以在这里看看: https://docs.oracle.com/javase/tutorial/2d/images/drawimage.html 以下段落: 例如,以下 drawImage() 方法的重载使您能够绘制指定图像的指定区域(当前可用的区域),缩放它以适应目标可绘制表面的指定区域内:
布尔值Graphics.drawImage(图片img, int dstx1, int dsty1, int dstx2, int dsty2, int srcx1, int srcy1, int srcx2, int srcy2, ImageObserver 观察者);