本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

在 Java 中读取大型 tiff 图像的最快方法是什么?

发布于2024-11-23 21:55     阅读(303)     评论(0)     点赞(24)     收藏(5)


我目前使用JAI 库来读取 tiff 图像,但读取大型 tiff 图像的速度非常非常慢(我需要处理大约 1GB 大小的卫星图像)。我需要从 tiff 图像中读取每个点的高度,然后相应地为其着色。

PlanarImage我正在通过创建并使用此方法遍历每个像素来读取图像image.getData().getPixel(x,y,arr)

请建议我一个更好的解决方案实施方法。

编辑:我发现了错误。我通过在 for 循环中调用 image.getData() 方法为每个像素创建一个新的图像栅格。只需创建一次栅格,然后在循环中使用其 getPixel() 函数就解决了我的问题。


解决方案


来自的JavaDoc PlanarImage.getData()

返回的 Raster 在语义上是一个副本。

这意味着对于图像的每个像素,您都在内存中创建整个图像的副本……这无法提供良好的性能。

使用getTile(x, y)getTiles()应该更快。

尝试:

PlanarImage image;

final int tilesX = image.getNumXTiles();
final int tilesY = image.getNumYTiles();

int[] arr = null;

for (int ty = image.getMinTileY(); ty < tilesY; ty++) {
    for (int tx = startX; tx < image.getMinTileX(); tx++) {
        Raster tile = image.getTile(tx, ty);
        final int w = tile.getWidth();
        final int h = tile.getHeight();

        for (int y = tile.getMinY(); y < h; y++) {
            for (int x = tile.getMinX(); x < w; x++) {
                arr = tile.getPixel(x, y, arr);
                // do stuff with arr
            }
        }
    }
} 


所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:http://www.javaheidong.com/blog/article/693954/478ba89a67d220936644/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

24 0
收藏该文
已收藏

评论内容:(最多支持255个字符)