您的位置:首页 > 其它

使用LibTiff处理TIFF文件

2012-06-04 15:58 633 查看
一 TIFF简介

IFF是Tagged Image File Format(标记图像文件格式)的缩写,这是现阶段印刷行业使用最广泛的文件格式,文件扩展名为tif或tiff.TIFF是一种比较灵活的图像格式,该格式支持单色,8,16,256色、24位真彩色、32位色、48位色等多种色彩位,同时支持rgb、cmyk以及ycbcr等多种色彩模式,支持多平台。tiff文件可以是不压缩的,文件体积较大,也可以是压缩的,支持raw、rle、lzw、jpeg、ccitt3组和4组等多种压缩方式

TIFF规范第一版本由Aldus公司在1986年发布,到现在已经发布到第六版。

我们这里只讨论使用libtiff对tif图进行编程,所以关于TIF的详细介绍请见Tiff Revision 6.0。

参考:/article/11031854.html

编译:
1 可以进入CMD环境直接运行命令行 "C:/libtiff/libtiff>
nmake /f makefile.vc all" ,假设代码放在C:/libtiff/libtiff> 下面。

读tiff文件
TIFF* tiff = TIFFOpen("left1.tif","r");

//TIFF* tiff = TIFFOpen("test.tif","r");

int nTotalFrame = TIFFNumberOfDirectories(tiff);

TIFFSetDirectory(tiff,0);

char *dtitle;

TIFFGetField(tiff,TIFFTAG_PAGENAME,&dtitle);

int width,height;

TIFFGetField(tiff, TIFFTAG_IMAGEWIDTH, &width); //得到宽度

TIFFGetField(tiff, TIFFTAG_IMAGELENGTH, &height);//得到高度

uint16 bitspersample=1;

uint16 samplesperpixel=3;

TIFFGetField(tiff, TIFFTAG_SAMPLESPERPIXEL, &samplesperpixel);

TIFFGetField(tiff, TIFFTAG_BITSPERSAMPLE, &bitspersample);

uint16 bitsperpixel = bitspersample * samplesperpixel;

//算出每个像素占多少bit,24位图,值为24

DWORD dwBytePerLine = (width*bitsperpixel)/32 *4;

//由上面几个参数算出图像每行所占字节(BYTE)数。

//为存放数据分配内存空间

ArrayJS buffJPG;

for (int y = 0; y < height; y++)

{

BYTE* buffTIF =(BYTE*)(malloc(width*4));

int flag = TIFFReadScanline(tiff, buffTIF, y, 0);

for (int i=0;i<width;i++)

{

buffJPG.push_back(buffTIF[4*i]);

buffJPG.push_back(buffTIF[4*i+1]);

buffJPG.push_back(buffTIF[4*i+2]);

}

free(buffTIF);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: