【问题标题】:Trying to get multiple images out of a single image尝试从单个图像中获取多个图像
【发布时间】:2019-10-05 13:38:37
【问题描述】:

我最近遇到了一些事情。 我想要做的是从一张大图片中获取多个子图片。

所以举这个例子。我有一个 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】:

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

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

然后计算图块的大小(较小的值 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));
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-29
    相关资源
    最近更新 更多