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.

    此外,在进行任何渲染之前(出于性能原因),您需要迭代图像,将其裁剪到正确的大小。此外,在进行任何渲染之前(出于性能原因),您需要迭代图像,将其裁剪到正确的大小。“有没有办法做到这一点而不切断图像