gpt4 book ai didi

java - 在java中存储图像的最有效方法

转载 作者:行者123 更新时间:2023-11-30 11:13:27 24 4
gpt4 key购买 nike

当我用 JAVA 开发一些图像处理应用程序时,我想知道哪种方式存储图像最快且内存消耗更少。到目前为止,我发现我可以通过将所有加载的数据存储在 int[] 数组(宽度*高度长度,每个条目代表 32 位 RGBA 颜色)、BufferedImage 对象或 Image 对象中来实现。应用的主要目的是转换二维图像并执行特定结构(比方说边缘、角等)检测算法。

提前感谢您的每一条回复/评论!

最佳答案

我一开始是作为评论,但它变得越来越长 - 也许它有资格作为答案。

BufferedImage 正在扩展 Image。所以主要的选择是在 BufferedImage 和原始 int[] 数组之间。

关于 BufferedImageint[] 数组上的内存开销:对于“相当大”的图像,这应该可以忽略不计,因为 BufferedImage(使用 TYPE_INT_*)在内部存储的只是一个包含实际数据的 int[] 数组。 (特别是,此 int[] 数组存储为 Raster 中的 DataBufferInt 的数据)。

关于性能,访问原始数组元素和访问 BufferedImage 的像素之间可能存在明显甚至显着的差异。 BufferedImage 速度很快,尤其是对于绘图而言,但在计算像素值时,没有什么比普通的原始 int[] 数组更好的了。

但是,这对可能影响最终决定的广泛问题仅提供了很少的启示。例如,当您说要执行边缘检测等操作时,您可能会注意到此功能已可用于 BufferedImage,如 Image Processing and Enhancement 中所示。 Java2D 成像技术说明的部分。您将无法通过在 仅 4(四)行代码 的普通 int[] 数组上与 sobel 过滤器进行卷积来实现边缘检测。

顺便说一句:技术说明通常会提供一些背景信息,绝对值得一看以便在这里做出深刻的决定。

还有一个 answer on the GameDev stackexchange涵盖与此处相关的一些方面的网站,也许您会发现它很有趣。

关于java - 在java中存储图像的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26432426/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com