TIF格式即标签图像文件格式(Tag Image File Format,TIFF),是一种灵活的位图格式,主要用来存储包括照片和艺术图在内的图像。
它最初由Aldus公司与微软公司一起为PostScript打印开发。TIFF与JPEG和PNG一起成为流行的高位彩色图像格式。
TIFF格式在业界得到了广泛的支持,如Adobe公司的Photoshop、The GIMP Team的GIMP、Ulead PhotoImpact等图像处理应用、QuarkXPress和Adobe InDesign这样的桌面印刷和页面排版应用,扫描、传真、文字处理、光学字符识别和其它一些应用等都支持这种格式。
扩展资料:
TIFF的结构:
1、文件头
在每一个TIFF文件中第一个数据结构称为图像文件头或IFH,它是图像文悉握肆件体系结构的最高层。这个结构在一个TIFF文件中是惟一的,有固定的皮贺位置。它睁轿位于文件的开始部分,包含了正确解释TIFF文件的其他部分所需的必要信息。
2、文件目录
IFD是TIFF文件中第2个数据结构,它是一个名为标记(tag)的用于区分一个或多个可变长度数据块的表,标记中包含了有关于图像的所有信息。IFD提供了一系列的指针(索引),这些指针告诉我们各种有关的数据字段在文件中的开始位置,并给出每个字段的数据类型及长度。
3、图像数据
根据IFD所指向的地址,存储相关的图像信息。
参考资料来源:百度百科-TIF格式
如下:
TIFF是一种比较灵活的图像格式,它的全称是Tagged Image File Format,文件扩展名为TIF或TIFF。该格式支持256色、24位真彩色、32位色、48位色等多种色彩位,同时支持RGB、CMYK以及YCbCr等多种色彩模式,支持多平台。
TIFF文件可以是不压缩返顷的,文件体积较大,也可以是压缩的,支持RAW、RLE、LZW、JPEG、CCITT3组和4组等多种压缩方式。此格式能够包含有损压缩和未压缩的图像数据。此外,此格式也允许使用矢量图碧亮形。
TIFF图像格式
它是一种非失真的压缩格式(最高也只能做到漏慧陆2~3倍的压缩比)能保持原有图像的颜色及层次,但占用空间却很大。例如一个200万像素的图像,差不多要占用6MB的存储容量,故TIFF常被应用于较专业的用途,如书籍出版、海报等,极少应用于互联网上。
IFD是TIF图中最重要的数据结构,它包含了一个TIF文件中最重要的信息,一个TIF图可能有多个IFD,这说明文件中有多个图像,每个IFD标识1个图像的基本属性。 IFD结构中包含了三类成员,Directory Entry Count指出该结构里面有多少个目录入口;接下来就是N个线性排列的DE序列,数量不定(这就是 为什么称TIF格式文件为可扩充标记的文件,甚至用户可枝冲以添加自定义的标记属性),每个DE标识了图像的某一个属性;最后就是一个偏移量, 标识下一个文件目录相对于文件开始处的位置,当然,如果该TIF文件只包含了一幅图像,那么就只有一个IFD,显然,这个偏移量就等于0;现在大致知道 当 标识 为256的 目录入口(DE)中的变量为图象的宽
当 标识 为257的 目录入口(DE)中的变量为图象的高
下面一段代码是VC实现TIF->BMP的薯咐源程序的一部分
对其中的一些类和方法不是很清楚。(高手们帮忙看看怎么转到bcb中 ^_^ )
(需要用到我在上面帖的那两个结构体)
....
....
2、添加TiffStruct.h文件,定义IFH和DE结构(参考前面的结构描述),用来接收读TIF文件的信息。
#ifndef _TIFFSTRUCT_
#define _TIFFSTRUCT_
typedef struct tagIMAGEFILEHEADER
{
WORD byteOrder
WORD version
DWORD offsetToIFD
}IFH
typedef struct tagDIRECTORYENTRY
{
WORD tag
WORD type
DWORD length
DWORD valueOffset
}DE
#endif
3、在文档类中添加4个公有变量,并将其初始化为0。在TiffTestDoc.cpp中#include "TiffStruct.h"
DWORD m_dwBmSize//图象的数据部分的大小
CPalette m_palDIB//BMP图象调色板
HANDLE m_hDIB//BMP图象内存块句柄
CSize m_sizeDoc//图象的长和宽
4、在文档类的OnOpenDocument函数中定义局部工具变量并读文件
DWORD dwFileLength = 0
CString strTemp = _T("")
WORD wDECount = 0
BYTE* pDIB = NULL
int i = 0
IFH ifh
ZeroMemory(&ifh, sizeof(IFH))
CFile file
CFileException fe
if(0 == file.Open(lpszPathName, CFile::modeRead | CFile::shareDenyWrite, &fe))
{
AfxMessageBox("打开文件失败")
return FALSE
}
dwFileLength = file.GetLength()
//读IFH文件头
if(sizeof(IFH) != file.Read(&ifh, sizeof(IFH)))
{
AfxMessageBox("猛手歼读TIF文件头失败")
return FALSE
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)