Java 显示图像图标的一部分
你好, 我正在尝试我的手在动画,并发现自己在一个单一的图像在一排爆炸带。我想让他们按顺序一个接一个地显示爆炸动画。当然,我在思考Java 显示图像图标的一部分,java,swing,jlabel,imageicon,Java,Swing,Jlabel,Imageicon,你好, 我正在尝试我的手在动画,并发现自己在一个单一的图像在一排爆炸带。我想让他们按顺序一个接一个地显示爆炸动画。当然,我在思考JLabel上的ImageIcon,但当我查看JLabel规范时,我发现这一行: JLabel(图标图标)——使用指定的映像创建一个JLabel实例。标签在其显示区域中垂直和水平居中 我希望能够在标签中只显示完整图像的一部分,然后加载另一部分:基本上在一个图像上加载不同的阶段 有没有一种方法可以做到这一点,而无需切割图像并单独加载每个图像?您可以这样做,您可以调用以获取
JLabel
上的ImageIcon
,但当我查看JLabel
规范时,我发现这一行:
JLabel(图标图标)
——使用指定的映像创建一个JLabel
实例。标签在其显示区域中垂直和水平居中
我希望能够在标签中只显示完整图像的一部分,然后加载另一部分:基本上在一个图像上加载不同的阶段
有没有一种方法可以做到这一点,而无需切割图像并单独加载每个图像?您可以这样做,您可以调用以获取图像的裁剪副本,同时保留原始图像,您可以调用以获取图像的裁剪副本,同时保留原始图像
将标签添加到JScrollPane,并将滚动窗格的大小设置为单个图像的宽度。您可能还需要删除滚动窗格的boder,并确保滚动窗格不显示滚动条
使用摆动计时器来安排动画
每次定时器启动时,您都可以使用视口的setViewPosition方法更改滚动窗格的视口位置
将标签添加到JScrollPane,并将滚动窗格的大小设置为单个图像的宽度。您可能还需要删除滚动窗格的boder,并确保滚动窗格不显示滚动条
使用摆动计时器来安排动画
每次定时器启动时,您都可以使用视口的setViewPosition方法更改滚动窗格的视口位置
您还可以使用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坐标
- 观察者-缩放和转换更多图像时要通知的对象
请参见使用单个动画精灵选择要绘制的图像的不同位置的示例
2015年1月20日之前,此答案中指向的示例程序(用于创建上述爆炸的动画显示)存在逻辑错误,仅显示了2行图像。(请注意,该示例未显示爆炸的最后一行…)
请参阅上的附加答案,其中包含对程序的修复。干杯Warren K.您也可以使用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坐标
- 观察者-缩放和转换更多图像时要通知的对象
请参见使用单个动画精灵选择要绘制的图像的不同位置的示例
2015年1月20日之前,此答案中指向的示例程序(用于创建上述爆炸的动画显示)存在逻辑错误,仅显示了2行图像。(请注意,该示例未显示爆炸的最后一行…)
请参阅上的附加答案,其中包含对程序的修复。干杯Warren K.此外,在进行任何渲染之前(出于性能原因),您需要迭代图像,将其裁剪到正确的大小。此外,在进行任何渲染之前(出于性能原因),您需要迭代图像,将其裁剪到正确的大小。“有没有办法做到这一点而不切断图像