JAVA:尝试读取精灵表时未格式化的精灵
所以我是一个用ImageIO做实验的初学者。有人能告诉我为什么我得到这个像素化的不完整的精灵吗? 这是密码JAVA:尝试读取精灵表时未格式化的精灵,java,javax.imageio,sprite-sheet,Java,Javax.imageio,Sprite Sheet,所以我是一个用ImageIO做实验的初学者。有人能告诉我为什么我得到这个像素化的不完整的精灵吗? 这是密码 public BufferedImage getImage(String location) { try { File file = new File(location); image = ImageIO.read(file); } catch (IOException e) { System.
public BufferedImage getImage(String location)
{
try
{
File file = new File(location);
image = ImageIO.read(file);
}
catch (IOException e)
{
System.err.println("It don't work!!");
e.printStackTrace();
}
return image;
}
我用这个方法来显示它
public void paint(Graphics g)
{
g.drawImage(getImage("Numbers/icon0.png"), 0, 0, 32, 32, null);
repaint();
}
这就是它给我的
如果要显示精灵的第一个(单个)单元格,您可能想写:
g.drawImage(getImage("Numbers/icon0.png").getSubimage(0, 0, 32, 32), 0, 0, null);
注意getSubimage(x,y,w,h)
部分,以获得单个单元格
如果要绘制整个精灵图纸,可以使用:
g.drawImage(getImage("Numbers/icon0.png"), 0, 0, null);
您的原始代码将绘制整个精灵图纸,并重新缩放为32x32
PS:您可能不应该从
paint
方法调用repaint()
,因为这将创建一个无休止的重新绘制循环。如果希望组件重新绘制,请使用某种计时器以固定的间隔重新绘制组件
PPS:您可能不应该在paint方法内部执行I/O(即读取图像),因为任何I/O操作都可能需要时间,并使UI变得迟钝和无响应。这也是不必要的,因为精灵表不会在每次重新绘制时更改。相反,请先阅读图像,然后仅使用paint
方法绘制图像