libtiff使用小記

2021-06-18 02:55:32 字數 1245 閱讀 4144

這兩天就跟libtiff庫卯上了,總會遇到奇怪的問題。現在問題或直接或曲折的解決了,一一記錄下來。

問題一:tiffsetdirectory函式的使用。

**目的:交叉讀取tiff中兩頁的每一行,假設第一頁tif為tif_0,第二頁tif為tif_1。

我的目的就是先讀tif_0的第i行,然後讀tif_1的第i行,而後i++。**如下:

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

問題現象:tiffreadscanline讀取失敗。i = 0時是成功的,然後每隔大概12行的樣子又成功一次。

其他都是讀取失敗,返回-1。

即時不切換頁碼,但是每次讀取行資料前都setdirectory得話也會出現這個問題: 

for(int i = 0; i < tifh; 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庫卯上了,總會遇到奇怪的問題。現在問題或直接或曲折的解決了,一一記錄下來。問題一 tiffsetdirectory函式的使用。目的 交叉讀取tiff中兩頁的每一行,假設第一頁tif為tif 0,第二頁tif為tif 1。我的目的就是先讀tif 0的第i行,然後讀tif 1的第...

libtiff解決方案

usr lib gcc x86 64 linux gnu 4.8 x86 64 linux gnu libopencv highgui.so undefined reference to tiffreadrgbastrip libtiff 4.0 collect2 error ld returned...

使用libtiff庫生成tif檔案,格式轉換。

該 主要使用libtiff庫,將t.6 格式檔案轉換成 t.4格式。int tiff2tiff char psrcfile,char pdstfile if outiff tiffopen pdstfile,w null 獲取原始檔的配置資訊 tiffgetfield intiff,tifftag ...