cxImage處理tif圖片時需要注意的地方
阿新 • • 發佈:2019-01-06
tif圖片主要分為兩種:一種是單張的,還有一種是分層的,分層的tif圖片其實就一張tif圖片裡面包含多張圖片,然後可以翻頁的那種,有點類似於動態GIF圖片,不過tif的翻頁不是自動的,需要手動點選翻頁按鈕才行,下面就是一張tif分層的圖片(網上不太好找,可以自己下一個AcdSee做tif的圖片)。
一、使用cxImage讀取tif圖片
對於單張的tif圖片,直接可以用以下方式來讀取:
CxImage* cxImg;
cxImg->Load(lpszPathName,CXIMAGE_FORMAT_TIF);
對於分層的tif圖片,可以定義一個CxImage的陣列(不是CxImage*型別的陣列)來儲存分層tif圖片中每張圖片,具體如下所示:
CxImage* imgs;//此處為一個CxImage型別的陣列 CxImage* cxImg; if(cxImg->Load(lpszPathName,CXIMAGE_FORMAT_TIF)) { int frameNum=cxImg->GetNumFrames();//獲得分層tif圖片的幀數 imgs=new CxImage[frameNum];//動態建立CxImage陣列 for(int i=0;i<frameNum;i++) { cxImg->SetFrame(i);//設定當前要讀取的幀為第i幀 cxImg->Load(lpszPathName,CXIMAGE_FORMAT_TIF); imgs[i].Copy(*cxImg); } }
二、儲存tif圖片
儲存tif格式圖片也分為單張的和分層的tif圖片兩種。
1、單張tif圖片的儲存
直接使用cxImg->Save(lpszPathName,CXIMAGE_FORMAT_TIF);
2、分層tif圖片的儲存
FILE* hFile; hFile=fopen(lpszPathName,"w+b"); CxImageTIF tifImg;//需要增加標頭檔案ximatif.h,該標頭檔案在CxImage目錄下 for(int i=0;i<frameNum;i++) { //frameNum和imgs[i]的定義和讀取分層tif圖片中一樣 tifImg.Copy(imgs[i]); tifImg.Encode(hFile,TRUE); } fclose(hFile);
三、選擇tif圖片的壓縮方式
tif圖片的可選壓縮方式有很多種,比較常見的有JPEG,LZW,CCITT_T6等等,具體可以在相關的標頭檔案裡面查詢。
選擇相應的壓縮方式可以使用CxImage的SetCodecOption方法。
例如:cxImg->SetCodecOption(COMPRESSION_LZW);
需要注意的是,當選擇JPEG壓縮方式的時候,只能處理灰度或者是RGB影象