1. 程式人生 > >cxImage處理tif圖片時需要注意的地方

cxImage處理tif圖片時需要注意的地方

       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影象