显示ImageIcon的一部分
Bonjour,我正在尝试动画,并且发现自己在连续的单个图像上发现了一条爆炸。 我希望他们按顺序依次显示爆炸动画。 当然,我在JLabel
上思考ImageIcon
,但是当我查看JLabel
规范时,我发现了这一行:
JLabel(Icon icon)
– 使用指定的图像创建JLabel
实例。 标签在其显示区域中垂直和水平居中。
我希望能够在标签中仅显示完整图像的一部分,然后加载其中的另一部分:基本上在一个图像上加载不同的阶段。
有没有办法在不切割图像和单独加载图像的情况下执行此操作?
您最初可以使用BufferedImage
加载图像 ,您可以调用getSubimage
来获取图像的裁剪副本,同时保留原始Image
您还可以使用Graphics
类中的drawImage
方法绘制图像以裁剪正在绘制的图像
public abstract boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, ImageObserver observer)
绘制与当前可用的指定图像一样多的指定区域,即时缩放它以适合目标可绘制表面的指定区域。 透明像素不会影响已存在的任何像素。
参数:
- img – 要绘制的指定图像。 如果img为null,则此方法不执行任何操作。
- dx1 – 目标矩形的第一个角的x坐标。
- dy1 – 目标矩形第一个角的y坐标。
- dx2 – 目标矩形的第二个角的x坐标。
- dy2 – 目标矩形的第二个角的y坐标。
- sx1 – 源矩形第一个角的x坐标。
- sy1 – 源矩形的第一个角的y坐标。
- sx2 – 源矩形的第二个角的x坐标。
- sy2 – 源矩形的第二个角的y坐标。
- observer – 在缩放和转换更多图像时要通知的对象。
请参阅此处的示例,该示例使用单个动画精灵来选择要绘制的图像的不同位置。
在20JAN15之前,从这个答案中指出的示例程序 (用于创建上面爆炸的动画显示) 具有逻辑错误并且仅显示2行图像。 (注意,该示例未显示爆炸的最后一行…)
请参阅指向该页面的附加答案,其中包含该程序的修复程序。 干杯。 沃伦K.
-
将标签添加到JScrollPane并将滚动窗格的大小设置为单个图像的宽度。 您可能还想删除滚动窗格的boder并确保滚动窗格不显示滚动条。
-
使用Swing Timer来安排动画。
-
每次Timer触发时,您都可以使用视口的setViewPosition方法更改滚动窗格的视口位置。