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

VC++使用GDI+合成與轉換JPEG/BMP圖片的方法

     編輯:VC 教學

整體思路

將兩張 JPEG 圖片合併為一張:先分別轉為 BMP,水平拼接成一張 BMP,最後再轉回 JPEG。核心在於 GDI+ 的 Image/Bitmap/Graphics 類與編碼器(Encoder)的使用。

一、圖片格式互轉:ConvertPic

BOOL ConvertPic(const WCHAR* format, const CString& strDst, const CString& strSrc) {
    CLSID clsid;
    if (GetEncoderClsid(format, &clsid) >= 0) {
        USES_CONVERSION;
        Image image(A2W(strSrc));
        image.Save(A2W(strDst), &clsid, NULL);
        return TRUE;
    }
    return FALSE;
}

GetEncoderClsid 遍歷系統編碼器,依 MIME 類型(image/jpeg、image/bmp)取得 CLSID。

調用示例

ConvertPic(L"image/jpeg", L"c:\\1.jpg", L"c:\\1.bmp"); // BMP → JPEG
ConvertPic(L"image/bmp", L"c:\\1.bmp", L"c:\\1.jpg");  // JPEG → BMP

二、BMP 圖片水平合併:CombinePic

BOOL CombinePic(const WCHAR* format, const CString& strDst,
                const CString& strPic1, const CString& strPic2) {
    CLSID clsid;
    if (GetEncoderClsid(format, &clsid) >= 0) {
        USES_CONVERSION;
        Bitmap bmp1(A2W(strPic1)), bmp2(A2W(strPic2));
        int w = bmp1.GetWidth(), h = bmp1.GetHeight(); // 假設同尺寸
        Bitmap bmpComb(2 * w, h);
        Graphics* g = Graphics::FromImage(&bmpComb);
        if (g) {
            g->DrawImage(&bmp1, 0, 0);
            g->DrawImage(&bmp2, w, 0);
            bmpComb.Save(A2W(strDst), &clsid, NULL);
            delete g;
            return TRUE;
        }
    }
    return FALSE;
}

調用示例

CombinePic(L"image/bmp", L"12.bmp", L"1.bmp", L"2.bmp");

三、VC6.0 環境配置提示

  • 需將 GDI+ 的頭文件、庫文件(gdiplus.lib)放入對應目錄。
  • 代碼中必須執行 GdiplusStartup 初始化與 GdiplusShutdown 釋放。
  • 專案設定中加入 gdiplus.lib 鏈接。

總結

掌握編碼器查找、Bitmap/Graphics 繪圖、圖片保存三大核心步驟,即可靈活實現格式轉換與多圖合成。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved