或许你曾经遇到过的一个问题,但是我现在很需要大家的帮忙。
现在有一个tiff的文件,很大的,700M啊!但是为了显示该图,可能有其他的方法,目前是要用C#来写一个显示的模块,这么大的数据,肯定是要抱错的,内存不够用阿,我想应该是要看哪些数据,就读取哪些数据,不过tiff的文件格式也不清楚,读取就没有什么思路。肯定大家帮帮忙,能不能提供相关的资料,有源代码最好了,我觉得这个东西是很有用的,但是写起来也一定很困难。一起攻克这个问题吧
我的邮箱:[email protected],有资料发给我吧,谢谢了!
------解决方案--------------------
下面是tif文件格式的简要说明http://www.cppblog.com/windcsn/archive/2005/11/16/1158.aspx
要显示的话,需要你对tiff格式有很好的理解,然后显示时用缩略图算法,将大的图片读一个小的进来,但是没有试过,这个东西要做,确实要好好研究一下才可以。希望这些资料对你有帮助
TIFF图像文件格式分析
一、 介绍
TIFF全名 tag image file format,是一种基于标志域的图形。
TIFF图像是靠指针连接来组织数据的,文件头和数据可以任意数据的存储。TIFF由四种类型:TIFF-B,二色;TIFF-G,黑白灰度;TIFF-P,带调色板的彩色图形;TIFF-R,适合RGB色彩的图形。
二、 组成
TIFF一般来说由四部分组成:文件头、文件目录、目录内容、图像数据;如下图,下面具体说明。
三、 具体格式
1. 文件头部分
文件头部分有8个字节,格式为:
0 2 4
II/MM(表示字节序)
42(版本号)
文件目录在整个文件的偏移量,是一个指针,指向IFD的开始部分
5 8
注意这里的值不一定就是紧接头后的0A地址,可以是任意的。
2. 文件目录部分
0 2 14
IFD的总项数
项1(12个字节)
项2。。。。(12个字节)
下一个IFD的开始地址(用于保存多个文件)
每个项的12个字节,其是连续的,有前两个字节说明其项的总数。对于不同的TIFF格式文件,这里的不同。
3. 目录项
每个目录项由12个字节组成,格式如下:
TAG(2个字节)
TAG的数据类型
数据长度
数据值或值的偏移(文件范围)
TAG的值由TIFF标准定义;不同的TAG表示不同的意思,例如0X0100表示图像的宽度。
TAG的数据类型表示数据值的类型;例如使用long类型来表示宽度。
数据长度是以数据类型为单位的,真正的数据长度是:数据长度*sizeof(数据类型)
数据值或值的偏移:如果数据长度小于4个字节,一般直接以该字段来表示其值,如果其值大于4个字节,就指定一个文件范围的偏移地址,从那里开始的“数据长度*sizeof(数据类型)”个字节表示该标志的值。
4. 图像数据:
紧接上面数据之后就是图像数据了;图像数据的存储形式有不同的形式,有以像素位来存储的,也有以颜色面来存储的;具体的存储方式在目录项中定义。
四、 一些TAG值
TAG值
说明
十进制
16进制
256
100
图像宽度
257
101
图像高度
258
102
BitsPerSample,对于RGB是8,8,8,通过偏移来表示
259
103
压缩方式(1/2/32773),1为不压缩
262
106
光度滴定,对于RGB图,该值是2
273
111
带的偏移,每个带是不同的
277
115
每像素的颜色成分,对于RGB这个值一般是3,如果需要其他有ExtraSamples标志
278
116
每带的行数
279
117
每带中压缩之后的数据字节常长度
284
11C
每个分量(R,G,B)是怎么存储的,1表示按照RGBRGB的顺序来存储
296
128
Xresolution和Yresolution的单位
更多的参考TIFF标准
五、 一个TIFF文件格式分析
为了保证图片的宽度,不得不将一些文字折行
------解决方案--------------------
kodak 空间TRY TRY
------解决方案--------------------
用控件吧