libtiff使用小记
来源:互联网 发布:linux下lnmp环境搭建 编辑:程序博客网 时间:2024/05/19 19:40
这两天就跟libtiff库卯上了,总会遇到奇怪的问题。现在问题或直接或曲折的解决了,一一记录下来。
问题一:TIFFSetDirectory函数的使用。
代码目的:交叉读取tiff中两页的每一行,假设第一页tif为tif_0,第二页tif为tif_1。
我的目的就是先读tif_0的第i行,然后读tif_1的第i行,而后i++。代码如下:
for(int i = 0; i < tifh; i++){
res = TIFFSetDirectory(tif, 0); //设置在第一页
res = TIFFReadScanline(tif, (tdata_t)ptemp, i); //读取一行
res = TIFFSetDirectory(tif, 1); //设置为第二页
res = TIFFReadScanline(tif, (tdata_t)ptemp, i); //读取一行
...
}
问题现象:TIFFReadScanline读取失败。i = 0时是成功的,然后每隔大概12行的样子又成功一次。
其他都是读取失败,返回-1。
即时不切换页码,但是每次读取行数据前都setdirectory得话也会出现这个问题:
for(int i = 0; i < tifh; i++){
res = TIFFSetDirectory(tif, 0); //设置在第一页
res = TIFFReadScanline(tif, (tdata_t)ptemp, i); //读取一行
...
}
问题分析:把同事请来,捯饬了老半天发现,当调用TIFFSetDirectory函数后,tif切换至设定的directory,并且设置当前行为0 。
所以如果刚刚TIFFSetDirectory之后,我想读取第2行的数据,就会返回错误码。测试了下如果只调用TIFFSetDirectory一次,但是直接就读第n>0行时,同样会返回-1 。也不知道我们的理解是否正确,这是跟到TIFFReadScanline函数里发现的。
问题解决:本以为调用些其他的函数能够解决这个问题的,尝试了半天无解。不能这么一行一行交叉着读取,我只好改换方法了,按顺序读取完毕再做其他操作了。
所以也不算是解决了问题,只是避开了问题。
问题二:TIFFWriteEncodedStrip函数的使用。
问题分析:该函数的第三个参数是一个tdata_t类型的数据,也就是要写入tif的像素数据。
例如,我想生成的tif文件宽为w,高为h。
但我的tdata_t数据长度为w'*h,w'>w。
这在现实中应该常常碰到,因为对于单色的tif图像,像素按位排列,内存至少要一个字节,难免碰到不能被8整除的图像宽度值。
如果我硬生生的这么把这个tdata_t数据塞给TIFFWriteEncodedStrip函数,它会读取该数据中的前w*h位,并作为像素数据存入tif。
结果自然是生成的tif图像每行都有w'-w像素的偏移咯。
没办法,俺就用的TIFFWriteScanline。
写的够乱的,汗。
- libtiff使用小记
- libtiff使用小记
- windows下使用libtiff
- 使用LibTiff处理TIFF文件
- win7 vs2010 配置使用 libtiff
- libtiff库的使用心得
- VC下使用LibTiff处理TIFF文件
- VC下使用LibTiff处理TIFF文件
- VC下使用LibTiff处理TIFF文件
- 关于Libtiff库的使用(zz)
- VC下使用LibTiff处理TIFF文件
- 使用libtiff读取tif/tiff图像
- libtiff 使用-读取多页tiff图片
- 使用libtiff写RGB彩色tiff图
- VC下使用LibTiff处理TIFF文件(转载)
- 使用libtiff读tiff图RGBA四通道数据
- Fuzzing简介以及使用AFL对LibTIFF进行模糊测试
- libtiff编译
- 实例讲解java中==和equals的区别
- CPPUnit使用方法初探
- 史玉柱经典语录
- Ehcache 1.5.0 User Guide - Cache Configuration 缓存配置(2)
- 查找数据库所有表以及表的所有列
- libtiff使用小记
- Eclipse的安装过程
- 初探计算机病毒世界(1)--感染
- 集合操作的利器:CollectionUtils
- 需求老变是错觉,需求老多是幻觉
- 35 Absolutely Useful Firefox Plugins For Web Designers And Developers
- datalist实现分页
- exchange 2007 的一个不能收邮件的问题
- 怎么格式化业务表单域中的日期显示方式