2013-04-18 26 views
0

经历了许多类似的问题之后,我没办法,只能在这里提出自己的问题。如何从位图数据创建BufferedImage

我需要在swing应用程序上显示图像。图像的来源是从MS SQL服务器检索到的位图数据。我尝试了以下方法

TRY 1 - 我试图从检索的字节中创建ImageIcon。没有结果。

TRY 2 - 将字节保存在.png文件中并尝试加载使用ImageIO。这在我的本地机器上正常工作,但在测试服务器上失败。这两个都是Windows机器。

TRY3 - 在步骤2中,我尝试使用不同于.png的格式进行保存。它根本不起作用。

请让我知道我错过了什么?

注意:我已尝试将jai jar包括到参考库中。

+0

我在Durandal的帮助下解决了这个问题。我不得不直接使用JAI创建映像,因为我没有权限在目标系统上安装JAI。 'PlanarImage planar = JAI.create(“stream”,SeekableStream.wrapInputStream(inputStream,true));'是要走的路。然后使用'planar.getAsBuffredImage()'进行显示。 –

回答

0

您应该已经存储了提示数据在数据库中的格式。如果没有,你只能希望ImageIO 可以用来处理它。

没有必要将数据写入文件(这本身就是一个陷阱,你会写它们吗?考虑受限的进程权限和磁盘配额)。只需创建一个可直接访问数据的InputStream(例如java.io.ByteArrayInputStream),这样您就可以使用基于流的方法直接加载ImageIO。

+0

感谢您的回复。图像在数据库中保存为_image_类型。如果你看数据,它是一个很大的十六进制整数。我正在以字节读取数据。有没有其他方法我应该尝试? 我尝试了你提到的方式。仍然没有结果。从数据库读取数据时可能是我错了(!?) –

+0

MS-SQLServer中的类型列“IMAGE”与图形图像无关。 Image是二进制文件的blob类型,它可以包含任何种类的二进制数据。如果ImageIO无法处理所有图像,只能手动查看那些失败的图像,并检查出四个字节 - 通常包含一些幻数,以便您猜测文件的格式(http:// www。 astro.keele.ac.uk/oldusers/rno/Computing/File_magic.html有一个常用幻数的简短列表)。我怀疑你的一些文件根本不是图像,或者它是ImageIO不支持的罕见格式。 – Durandal

+0

我检查了您提供的链接,它是小端英特尔TIFF格式。是的,这个图像列将始终有图像数据。所有图像数据以'49492a00'开头。我发现ImageIP API默认不支持tiff格式。作为大多数情况下的附加信息,我也以文件形式存在图像数据,但即使将JAI添加到我的库中后,我也无法读取这些图像。 –