libtiff库的使用心得

VC2010使用libtiff库的环境配置:

头文件:tiff.h、tiffconf.h、tiffio.h、tiffvers.h

库文件:libtiff.lib、libtiff.dll

以上文件放到当前工作路径即可。

源码中需要写入:

#include "tiffio.h"

#pragma comment( lib, ".\\lib\\libtiff.lib")

 

接下来就可以使用该库的API:

TIFF* TIFFOpen(const char*, const char*);//写入或读取tif文件。

该函数有两个参数。第一个参数用于输入图片文件的名称(绝度路径或相对路径)

第二个参数用于表示对图片文件的模式。"r"代表读。"w"代表写,"a"代表追加。返回一个tiff指针,以后所有的操作都可以通过该指针进行。

void TIFFClose(TIFF* tif);//用于释放图片在内存中的资源。Tif即为图片在库中的tif指针。

 

如:TIFF*tiff_r = TIFFOpen(“temp.tif”,”r”);

If(tiff_r)

{

    …..

}

TIFFClose(tiff_r);

 

int TIFFGetField(TIFF* tif, uint32 tag, ...);//用于获取tif图片的属性。

其属性主要包括如下(仅写出比较重要的几个)

TIFFTAG_BITSPERSAMPLE  每个像素点中每个通道的颜色深度(即一个通道占几个字节)

TIFFTAG_COLORMAP 色图:调色板图像的RGB映射

TIFFTAG_COMPRESSION  压缩标准:COMPRESSION_NONE、COMPRESSION_PACKBITS 、COMPRESSION_LZW(一部分)

TIFFTAG_IMAGELENGTH1 uint32* 图像长度 
TIFFTAG_IMAGEWIDTH 1 uint32* 图像宽度

TIFFTAG_ROWSPERSTRIP1 uint32* 每个条的行数
TIFFTAG_XRESOLUTION 1 float* X分辨率|水平解析度

TIFFTAG_YRESOLUTION1 float*? Y分辨率|竖直解析度

详细说明见:http://blog.csdn.net/augusdi/article/details/10396421

int TIFFSetField(TIFF*, uint32, ...);//用于设置tif图片的属性。

主要设置如下:

TIFFSetField(image,TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_RGB);//设置色彩模式 

TIFFSetField(tif_r,TIFFTAG_IMAGEWIDTH,1024);//设置图像宽度。            TIFFSetField (tif_r,TIFFTAG_IMAGELENGTH, 2048);//设置图像高度

TIFFSetField (tif_r,TIFFTAG_BITSPERSAMPLE, 16);//设置图像每通道的位数

TIFFSetField (tif_r,TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_RGB);//设置图像类型

TIFFSetField (tif_r,TIFFTAG_SAMPLESPERPIXEL,3);//设置图像的通道数

TIFFSetField (tif_r,TIFFTAG_XRESOLUTION, 72.000000);//x分辨率

TIFFSetField (tif_r,TIFFTAG_YRESOLUTION, 72.000000);//y分别率

TIFFSetField(image,TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG); // 设置配置

TIFFSetField(image,TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG); // 设置Planar配置.

 

 

int TIFFWriteScanline(TIFF* tif, void* buf, uint32 row, uint16 sample = 0);//按行向图像写入数据,tif为图像指针,buf为需要写入的数据。row为需要写入图像的第几行,sample默认为0;

 

 

通过以上设置要写入tif图片的属性可以获取到写入该图片所需要的长度。

DWORDdwLeng = width * 3 *height;//在内存中存放该图片所需要的长度。

Uint16*pImageData = new Uint16[dwLeng];//为存放数据分配内存空间。

 

如果将保存有tif图片的data数据信息生成一幅.tif图片,则步骤如下:

Memset(pImageData,0,dwLeng*sizeof(Uint16);

Memcpy(pImageData,data,width*height*3*sizeof(Uint16));

 

for(intiheight = 0;iheight < height;iheight++)

{

    Uint16* prow = new Uint16[width*3];

    Memcpy(prow,pImageData+(byte*)iheight*width*3*sizeof(Uint16),width*3*sizeof(Uint16);

    TIFFWriteScanline(tif,prow,iheight,0);

    Delete [] prow;

    Prow = NULL;

}

 

 

TIFFWriteEncodedStrip函数的使用。

问题分析:该函数的第三个参数是一个tdata_t类型的数据,也就是要写入tif的像素数据。
由于可操作性太低,不易控制不推荐使用,推荐使用以下函数TIFFWriteScanline。

 

你可能感兴趣的:(libtiff开源库)