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

问题描述 投票:0回答:1

最近我一直被困在某个地方。我想做的是从1个大图像中获取多个子图像。

所以举这个例子。我有一个128x128像素的帧,其中需要所有图像。我将所有bufferedImages放入列表中,并将所有这些图像缩放到128x128。

您在该链接上看到的图像显示,我需要该图像中的4个子图像,因此,最后,我有4个图像,它们的分辨率为128x128,但是4倍。或者,如果您具有128x384的图像,它将给出3个从上到下的子图像。

https://i.stack.imgur.com/RsCkf.png

我知道有一个叫做的函数

BufferedImage.getSubimage(int x, int y, int w, int h);

但是问题是我无法弄清楚我需要实现什么数学。我试过的是,如果高度或宽度大于200,然后将其除以2,但这对我没用。

java bufferedimage
1个回答
0
投票

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

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

然后计算图块的大小(较小的值128和(图像尺寸-起始位置))。这是为了确保您不会试图获取图块。如果您的图像在任何维度上始终都是128的倍数,则可以跳过此步骤而仅使用128(只需确保您验证输入图像遵循此假设即可。)>

[如果您只想要128x128的图块,也可以跳过其余部分,如果图块小于128x128,我不确定您的要求是什么。无论如何,我会留给你。 :-)

最后,获得具有该大小和坐标的子图像,并将其存储在列表中。

代码:

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));
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.