將兩張 JPEG 圖片合併為一張:先分別轉為 BMP,水平拼接成一張 BMP,最後再轉回 JPEG。核心在於 GDI+ 的 Image/Bitmap/Graphics 類與編碼器(Encoder)的使用。
ConvertPicBOOL 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
CombinePicBOOL 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");
gdiplus.lib)放入對應目錄。GdiplusStartup 初始化與 GdiplusShutdown 釋放。gdiplus.lib 鏈接。掌握編碼器查找、Bitmap/Graphics 繪圖、圖片保存三大核心步驟,即可靈活實現格式轉換與多圖合成。