首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

CxImage 在 Visual C++ 6.0 環境下的完整配置與使用指南

     編輯:關於C語言

在開發過程中需要處理圖片時,尋找合適的開源庫往往令人頭疼。後來發現 CxImage 這個開源專案相當好用,支援 BMP、GIF、ICO、JPG、PNG、TIFF 等多種主流格式,對於一般應用程式開發者而言,無需深入研究圖像編解碼細節,且能有效解決圖片格式版本繁雜、相容性難題的困擾。雖然 CxImage 專案初看龐大複雜,但實際使用起來比開源視訊解碼庫簡單許多,極具實用價值。

一、CxImage 簡介

CxImage 是一個 C++ 圖像處理庫,具備載入、儲存、顯示與轉換圖像的功能,支援透明圖層與多圖層操作。相容格式涵蓋 BMP、GIF、JPG、PNG、MNG、TIF、ICO、TGA、PCX、J2K、JBG、RAS、PNM、RAW 及 PSD 等。其 Demo 專案支援 VC++ 及 Visual Studio 編譯環境。官方下載位址:SourceForge CxImage 專案頁。

二、CxImage 靜態連結配置步驟

1. 下載並解壓專案

從官網下載 CxImage 壓縮包,解壓至當前專案(例如 MyTest)的 CxImage 目錄下。CxImage 支援靜態與動態連結,本文以靜態連結為例。若需測試官方 Demo,直接編譯其目錄下的 demo 專案即可。

2. 將子專案加入方案

在 VC++ 6.0 中,將以下 .dsp 專案檔加入 MyTest 方案:

  • cximage.dsp —— 產生 cximage.lib
  • jasper.dsp、Jpeg.dsp、mng.dsp、png.dsp、tiff.dsp —— 各圖像格式庫
  • zlib.dsp —— 核心相依庫
  • demo.dsp —— 官方示範專案(可選)

其他格式庫視需求自行加入。

3. 設定連結參數與格式支援

在專案 Settings → Link 中加入對應 .lib 路徑,注意 Debug/Release 版本必須分別設定:

  • cximage/Cximage/Debug/cximage.lib
  • cximage/jasper/Debug/jasper.lib
  • cximage/jpeg/Debug/jpeg.lib
  • cximage/png/Debug/png.lib
  • cximage/zlib/Debug/zlib.lib

格式支援由 cximage/Cximage/ximacfg.h 控制,將需啟用的格式宏定義為 1,其餘設為 0。例如:

#define CXIMAGE_SUPPORT_BMP 1
#define CXIMAGE_SUPPORT_JPG 1
#define CXIMAGE_SUPPORT_PNG 1
#define CXIMAGE_SUPPORT_TIF 0
#define CXIMAGE_SUPPORT_JP2 1
// ... 其他格式依需求設定

ximacfg.h 設定示意圖

關鍵原則: ximacfg.h 設定、專案連結庫、子專案三者必須完全對應,否則會出現連結錯誤或執行時崩潰。

4. 編譯順序

CxImage 支援 Debug、Release、Unicode Debug、Unicode Release 四種建置模式,務必與主專案一致。先建置所有 CxImage 子專案產生 .lib,再建置主專案。

5. 實戰測試範例

以下程式碼示範載入 JPG 並繪製至靜態圖片控制項(CStatic):

#include "cximage\CxImage\ximage.h"

CxImage *m_pCSample = nullptr;
HBITMAP m_SampleBitMap = nullptr;

// 初始化靜態控制項樣式
m_SamplePic.ModifyStyle(SS_BLACKFRAME, SS_BITMAP | SS_CENTERIMAGE);

// 釋放舊物件
if (m_pCSample != nullptr) {
    delete m_pCSample;
    m_pCSample = nullptr;
}

// 載入圖片
m_pCSample = new CxImage();
m_pCSample->Load("sample.jpg", CXIMAGE_FORMAT_JPG);

// 處理 Alpha 通道
if (m_pCSample->AlphaIsValid())
    m_pCSample->AlphaCreate();

int m_iImageHeight = m_pCSample->GetHeight();
int m_iImageWidth  = m_pCSample->GetWidth();

// 取得裝置內容
HDC hDC = m_SamplePic.GetDC()->m_hDC;

// 重採樣至控制項大小
CRect lRect;
m_SamplePic.GetClientRect(&lRect);
m_pCSample->Resample(lRect.right, lRect.bottom);

// 建立並設定位圖
if (m_SampleBitMap) {
    DeleteObject(m_SampleBitMap);
    m_SampleBitMap = nullptr;
}
m_SampleBitMap = m_pCSample->MakeBitmap(hDC);
m_SamplePic.SetBitmap(m_SampleBitMap);

註:m_SamplePic 為對話方塊上 CStatic 控制項的控制變數,屬性需設為 Bitmap 與 Center Image。

三、使用心得與提示

  1. 查閱 ximage.h:所有公開方法皆在該標頭檔宣告,是最權威的 API 參考。
  2. 善用官方 Demo:demo 專案涵蓋幾乎所有功能,遇到不會用的功能,直接在 Demo 中搜尋關鍵字即可追蹤用法。
  3. 官方文件:SourceForge 專案頁提供進階範例與說明。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved