如何从Java中的2D浮点数组中写入TIFF?

时间:2011-05-26 01:13:08

标签: java image tiff

在Java程序中,我有一个1024 x 1024的浮点数组。如何编写与此数组表示的图像对应的TIFF文件?

澄清:

  1. 我要求一个代码段,说明如何编写与浮点数组相对应的TIFF。
  2. 我正在寻找灰度图像。
  3. 我知道如何将1024 x 1024浮点数转换为任何其他1024 x 1024数值数组;例如如果你想到的方法需要比如[0,1.0]范围内的1024 x 1024浮点数,没问题,我知道如何转换我的数据以便这个约束成立。
  4. 谢谢!

    KJO

3 个答案:

答案 0 :(得分:2)

您将遇到的问题是,虽然可能在TIFF中具有像素数据的浮点值,但是基线规范的一部分。 TIFF是一个足够糊涂的规范,允许浮点样本,但不能标准化它们的语义。例如,我有一个客户有一个Java应用程序生成的浮点样本(我相信使用ImageJ),并希望我们正确读取它们。 ImageJ已将一个严重序列化的哈希表放入其中一个描述字符串中,因此我必须为它们提供适用于该示例文件但可能不适用于其他文件的代码。不要那个Java应用程序。如果您打算使用ImageJ来编写浮点TIFF,请将数据标准化为0到1,因为这样我就可以保证至少我的工具可以正确读取它而不依赖于语义。

虽然基线规范说每个通道16位样本不是基线的一部分,但它们更有可能被当前的TIFF消费者识别。因此,如果您在编写TIFF时非常喜欢,那么从长远来看,在0..65535范围内使用16位样本写灰度可能会更快乐。

如果您认为您要编写不合规的TIFF,只需编写自己的文件格式并发布规范和读写代码。如果你将它变成TIFF,那么无论如何你都要创建一个新的格式,你将打破大多数消费TIFF的应用程序作为副作用。哪个更适合生态系统?

请记住,当你写一个糟糕的TIFF时,一个天使会着火。

答案 1 :(得分:1)

AFAIU JAI可以写入TIFF文件。

答案 2 :(得分:0)

处理TIFF图像的规范标准是libtiff library,用C语言编写。 可以从Java调用本机C代码。