一、目的
项目中使用了Tiff文件,之前使用的是Full-Color格式写的,即直接向文件中写入像素的R、G、B值,这种方式比较简单,但数据量较大,于是又改成使用Palette-Color格式来写,使用这种格式可以只将像素的强度写入文件就好了,然后再写入一个颜色表,图像显示时就可以根据像素强度和颜色表进行显示,数据量可以减小到原来的1/3,比较合适。在本文档中描述一下Full-Color格式和Palette-Color格式所用到的标签及他们的差别。
二、Tiff支持的图像类型
tiff文件共支持四种图像类型,分别是Bilevel(黑白图像)、GrayScale(灰度图像)、Palette-Color(调色板图像)、Full-Color(RGB图像)。
黑白图像为二值图像,非黑即白,用的较少,灰度图像是黑白图像的一般情况,我们在项目中使用的是调色板图像和RGB图像。
三、标签说明
1、256
含义:图像宽度
类型:2字节short或4字节int(tiff文档中说成是4字节long,它们一直吧4字节叫做long)
个数:1
偏移:即图像宽度,根据类型中设定的short还是int,填写对应类型的图像宽度
2、257
含义:图像高度
类型:2字节short或4字节int
个数:1
偏移:即图像高度,根据类型中设定的short还是int,填写对应类型的图像高度
3、258
含义:BitsPerSample,即用多少位来表示一个图像像素点
类型:2字节short或4字节int(由于偏移值值最大才为8,因此,个人觉得,根本用不到4个字节)
个数:对于调色板图像,只需一个字节就可以了,因此个数为1,但对于RGB图像,需要三个字节,因此个数为3
偏移:对于调色板图像,该值是4或者8,对于RGB图像,该值是4,4,4或8,8,8,因为这里需要填写3个数,所以需要在这里填写一个偏移地址,然后再到偏移地址中去找这三个值。
4、259
含义:Compression,压缩方法
类型:short
个数:1
偏移:只有三个值可以选,1表示不压缩,2表示CCITT压缩,32773表示PackBits压缩,对于调色板图像和RGB图像,偏移值填写1就可以了。
5、262
含义:PhotomericInterpretation,图像所采用的色彩系统
类型:short
个数:1
偏移:0表示对于黑白及灰度图像而言,0为白色,1表示对于黑白及灰度图像而言,0为黑色,2表示图像以RGB方式存储,3表示图像采用调色板索引
6、273
含义:StripOffsets,每个条状数据在文件中的偏移量
类型:short或int
个数:可以将全部图像数据作为一个条带,即令个数为1,也可以每行一个条带,此时个数就是图像的高度
偏移:即该条带内的图像在文件中的起始位置,如果全部图像都作为一个条带,且文件头后立即就存图像,则偏移量就是文件头所占的字节,即8,如果分成了多个条带,偏移量就是多个了,这时就得在这里填写一个偏移地址,然后根据偏移地址去找相应的偏移量。
7、277
含义:SamplesPerPixel,每像素的取样数
类型:short
个数:1
偏移:只有两个值可选,1表示黑白或灰度或调色板图像,3表示RGB图像。
备注:在调色板图像中,这个标签不是必须的,但在RGB图像中,要求有这个标签。
8、278
含义:RowsPerStrip,每个条带内图像的行数。
类型:short或int
个数:1
偏移:从字面意思来理解,这个标签应该是指每个条带内包含多少行图像数据,因此需要看看标签273中是怎么分的条带,如果只分一个条带,那就填写图像的高度,如果每行分成一个条带,那就填写1。
9、279
含义:StripByteCounts,每个条带内包含的字节数
类型:short或int
个数:需要根据273来填写,如果273中只分一个条带,那这里也填写1,如果273分成了n个条带,那这里就填写n
偏移:如果个数是1,说明全部图像只分了一个条带,因此这里的值就是图像的宽度乘以图像的高度,如果是每行分成一个条带,这里的值就是图像的宽度。
10、282
含义:XResoluion,宽度方向上每个分辨率单位(见标签296) 包含的像素个数
类型:Rational(两个无符号整形,第一个代表分子,第二个代表分母)
个数:没实际用过这种变量,根据Rational的定义,这里应该填写2
偏移:填写一个偏移地址,指向分子所在的位置
11、283
含义:YResolution,高度方向上每个分辨率单位包含的像素个数
类型:Rational
个数:2
偏移:填写一个偏移地址,指向分子所在的位置
备注:282和283这两个标签应该是用来表示图像实际大小的,如果不需要知道图像的实际大小,这两个标签也可以不写。
12、296
含义:ResolutionUnit,分辨率单位
类型:short
个数:1
偏移:只有3个值可选:1表示没指定单位,2表示以英寸为单位,3表示以厘米为单位。
13、320
含义:Color Map,调色板数据
类型:short
个数:根据258的值来定,一般标签258的值为8,则个数为:2 * 2^8 = 768。
偏移:由于需要写768个数,因此这里只能填写一个偏移地址,然后再根据偏移地址去找对应的数。
备注1:在偏移地址中写实际调色板数据时,注意先写256个R分量,再写256个G分量,再写256个B分量,根据tiff文档中介绍,每个分量的值最大为65535,但是我采用最大值255去写,似乎得到的结果也是正确的。
备注2:这个标签只在调色板图像中使用,RGB图像是用不到这个标签的。
四、总结
本文只是简单介绍了一下所用到的一些标签,不需要偏移地址的比较容易用,需要偏移地址的仅靠本文或许仍无法编程实现,不过网上有不少例子,介绍tiff标签怎么编程实现。我的理解或许有的地方也不正确,仅仅做个参考罢了。
五、参考文献
《TIFF Revision 6.0 Final june 3,1992》
http://blog.csdn.net/lipond/article/details/1795306