java - 试图从单个图像中获取多个图像
问题描述
我最近被一些事情困住了。我想要做的是从一张大图像中获取多个子图像。
所以举这个例子。我有一个 128x128 像素的框架,所有图像都需要在其中。我将所有缓冲图像放在一个列表中,并将所有这些图像缩放到 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,但这对我来说从来没有用过。
解决方案
我不确定我是否完全理解您的要求,但我认为您想要的是这样的:
首先,在两个维度上循环图像。
然后计算图块的大小(较小的值 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));
}
}
推荐阅读
- c++ - 为枚举类正确放置哈希表
- php - 在 Laravel 中将数据从 mySQL 显示到视图时出错
- python - 在文本中搜索多个短语 python
- wordpress - Wordpress JWT 身份验证令牌问题
- events - 如何在 Nuxt.js 中的图标链接上正确实现悬停效果
- python-3.x - 我有一个 .CSV 文件,其中包含这些日期的日期和 gms 值。是否可以对此应用线性回归?
- python - 替换部分字符串 Python
- dart - 列中的定位小部件导致卡片溢出
- python - 如果需要多个标准输入,python asyncio 会死锁
- php - 仅比较数组的值并获得差异