我搜索了 64 位窗口的 JAI 和 ImageIO 库,但我没有找到任何版本。6-7 年前 Java 错误跟踪系统上的最后 64 位获胜版本请求。
我认为,jai 的开发人员不会发布任何 win64 版本。:(
我的问题是,我们可以从它们的源代码为 64 位 Windows 构建 jai 和 imageio,这可能吗?如何?
多谢...
我搜索了 64 位窗口的 JAI 和 ImageIO 库,但我没有找到任何版本。6-7 年前 Java 错误跟踪系统上的最后 64 位获胜版本请求。
我认为,jai 的开发人员不会发布任何 win64 版本。:(
我的问题是,我们可以从它们的源代码为 64 位 Windows 构建 jai 和 imageio,这可能吗?如何?
多谢...
从源语言的角度来看,JAI 和 JAI Image I/O 有两个部分,java 和 C/C++。java 部分是免费的(作为免费啤酒),您可以从 java.net 下载和编译,但这是 java 源代码,无论架构如何(x86、x64)。
C/C++ 源代码不是由 SUN 发布的,因此您只能获取 Win32 和其他平台的编译后的 .dll。此源代码未发布有几个原因,一是SUN 使用第三方源并有权使用它,而不是(自由地)重新分发它。
三年前,我们联系了 SUN,以了解 JAI Image I/O JPEG 12 位编解码器中存在的几个错误,他们提供了一些选项。如果这些 bug 对我们来说是紧急的,我们可以提供 C/C++ 程序员来解决它们,如果我们签署 NDA(Non Disclosure Agreement),SUN 将向我们提供 codecLib 的源代码。另一个选择是等待 SUN 解决问题。我们为分配给错误的 SUN 工程师提供帮助,他在不到一周的时间内就解决了。
现在情况似乎有所不同,因为 JAI 和相关项目(图像 I/O)似乎不再活跃,即没有人在处理它们(新版本、错误修复)。
因此,如果您需要新版本,您最终会遇到很多 JAI 问题。
您可以使用 32 位 JRE 在 64 位操作系统(如 Windows 7 x64)中执行使用 JAI 的程序。
不幸的是,您不能在 64 位 JRE 中使用 JAI 或 Image I/O,因为您只能使用纯 Java 中可用的功能并且在 Image I/O 中丢失了大多数编解码器。
另一个问题是您真正需要 JAI 提供什么。JAI 可以使用 100% 纯 Java 实现(软件版本),速度较慢但解决了 x64 的问题。JAI Image I/O 也有一些功能可以由 100% 纯 Java 实现,但其中大多数,如编解码器,需要像 codedLib 这样的本机 dll。
试图在 Windows 7 上使用其本机 MediaLib Windows DLL 检查 32 位 Java 的生产力。它显示仅比 64 位纯 Java 代码稍慢(5-10%)。
我用中值滤波对相当大的 1 位黑白图像(大小为 9000 x 2500 像素)测试了 JAI。使用 7 x 7 中值滤波器,使用 32 位本机 Windows 库 (DLL) 处理需要 17 秒,使用没有 DLL 的纯 64 位 Java 需要 15 秒。测试重复 3-4 次,计时结果非常相似。
32 位 Java + 本机 MediaLib 的调试输出:
Raster path is "F:\Projects\Fadeev\listv.bmp"
Median size value set to 7
Output file will be saved to input directory
Data color set to default value java.awt.Color[r=255,g=0,b=0] (RED)
Color distance set to default value 20,00
New color set to default value java.awt.Color[r=255,g=0,b=0] (RED)
Image ( 9000 x 2461 ) read in 00:00:00.038
Image color quantized at 00:00:01.400
**Image filtered by () at 00:00:17.531** (MediaLib works now and here!!!)
Image stored at 00:00:00.356 (storing in PNG!)
Total time is 00:00:19.325
64 位纯 Java 的调试输出:
Raster path is "F:\Projects\Fadeev\listv.bmp"
Median size value set to 7
Output file will be saved to input directory
Data color set to default value java.awt.Color[r=255,g=0,b=0] (RED)
Color distance set to default value 20,00
New color set to default value java.awt.Color[r=255,g=0,b=0] (RED)
Image ( 9000 x 2461 ) read in 00:00:00.038
Image color quantized at 00:00:00.910
Error: Could not load mediaLib accelerator wrapper classes. Continuing in pure Java mode.
Occurs in: com.sun.media.jai.mlib.MediaLibAccessor com.sun.media.jai.mlib.MediaLibLoadException
**Image filtered by () at 00:00:13.802**
Image stored at 00:00:00.414
Total time is 00:00:15.164
抱歉,在 jai/imageio 代码库中不存在任何用于 win64 的代码。
http://java.net/projects/jai-core/sources/svn/show/trunk/src/share/mediaLib
http://java.net/projects/jai-imageio-core/sources/svn/show/trunk/src/share/jclib4jai
但它确实存在 jai/imageio 错误跟踪系统中的问题。
http://java.net/jira/browse/JAI_IMAGEIO_CORE-62
对此感到抱歉。