如何用Java的2D浮点数组编写TIFF?

问题描述

| 在Java程序中,我具有1024 x 1024的浮点数组。如何编写与此数组表示的图像相对应的TIFF文件? 说明: 我要一个代码片段,说明如何编写与浮点数数组相对应的TIFF。 我正在寻找灰度图像。 我知道如何将1024 x 1024的float数组转换为其他1024 x 1024的数值数组;例如如果您所想的方法要求1024 x 1024浮点数在[0,1.0)范围内,那么没问题,我知道如何转换我的数据,以便此约束成立。 谢谢! jo     

解决方法

您将遇到的问题是,尽管可能在TIFF中具有像素数据的浮点值,但这不是基线规范的一部分。 TIFF足够糊状,可以使用浮点样本,但不能标准化其语义。例如,我有一个客户,该客户具有Java应用程序生成的浮点样本(我相信使用ImageJ),并希望我们能够正确读取它们。 ImageJ已将一个严重序列化的哈希表放入描述字符串之一中,因此我必须给它们提供适用于该示例文件但可能不适用的代码。不要是那个Java应用程序。而且,如果您要使用ImageJ编写浮点TIFF,请对0到1之间的数据进行规范化,因为这样我可以保证至少我的工具可以正确读取它,而不必依赖语义。 尽管基线规范说每通道16位采样不是基线的一部分,但它们更可能被当前的TIFF消费者所认可。因此,如果您热衷于编写TIFF,从长远来看,使用0-.65535范围内的16位样本编写灰度可能会更快乐。 如果您认为要编写不兼容的TIFF,只需编写自己的文件格式并发布规范以及读写代码。如果将它塞入TIFF,则无论如何都在创建新格式,并且会破坏大多数TIFF消耗应用程序的副作用。哪个对生态系统更好? 请记住,当您编写错误的TIFF时,天使会着火。     ,AFAIU JAI可以写入TIFF文件。     ,处理TIFF图像的规范标准是libtiff库,它是用C编写的。 可以从Java调用本机C代码。