Java 尝试从单个图像中获取多个图像

Java 尝试从单个图像中获取多个图像,java,bufferedimage,Java,Bufferedimage,我最近一直在做一些事情。 我想做的是从一个大图像中得到多个子图像 就拿这个例子来说。我有一个128x128像素的帧,所有的图像都需要在其中。 我将所有BuffereImage放在一个列表中,并将所有这些映像缩放到128x128 您在该链接上看到的图像显示,我需要该图像的4个子图像,因此在最后,我有4个图像,它们是128x128,但有4次。 或者,如果您有一个128x384的图像,它将提供从上到下的3个子图像 我知道有一个函数叫做 BufferedImage.getSubimage(int x,

我最近一直在做一些事情。 我想做的是从一个大图像中得到多个子图像

就拿这个例子来说。我有一个128x128像素的帧,所有的图像都需要在其中。 我将所有BuffereImage放在一个列表中,并将所有这些映像缩放到128x128

您在该链接上看到的图像显示,我需要该图像的4个子图像,因此在最后,我有4个图像,它们是128x128,但有4次。 或者,如果您有一个128x384的图像,它将提供从上到下的3个子图像

我知道有一个函数叫做

BufferedImage.getSubimage(int x, int y, int w, int h);
但问题是,我不知道我需要实现什么样的数学。
我尝试的是,如果高度或宽度大于200,则将其除以2,但这对我来说并不适用。

我不确定我是否完全理解你的要求,但我认为你想要的是这样的:

首先,在两个维度上循环图像

然后计算平铺的大小(较小的值128和(图像尺寸-开始位置))。这是为了确保您不会试图将瓷砖带出边界。如果您的图像在任何维度上都是128的倍数,您可以跳过此步骤,只使用128(只需确保验证输入图像是否符合此假设)

如果您只需要128x128的磁贴,您也可以跳过其余的磁贴,如果磁贴小于128x128,我不确定您的要求是什么。不管怎样,我把这个留给你。:-)

最后,获取该大小和坐标的子图像并存储在列表中

代码:

buffereImage=。。。;
int tileSize=128;
列表平铺=新的ArrayList();
对于(int y=0;y
BufferedImage image = ...;
int tileSize = 128;
List<BufferedImage> tiles = new ArrayList<>();

for (int y = 0; y < image.height(); y += tileSize) {
    int h = Math.min(tileSize, image.height() - y);

    for (int x = 0; x < image.width(); x += tileSize) {
        int w = Math.min(tileSize, image.width() - x);
        tiles .add(image.getSubimage(x, y, w, h));
    }
}