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

VC.NET GDI+ 圖像處理完全指南:格式支援、核心類別與進階繪圖技巧

     編輯:VC 教學

GDI+ 引入 Image 與 Bitmap 兩大核心類別,統一封裝 BMP/GIF/JPEG/TIFF/PNG/WMF/EMF 等主流格式,讓圖像載入、顯示、轉換、縮放、旋轉、插值品質控制變得極其簡單,徹底擺脫手動解析檔案結構的痛苦。

主流圖像格式特性速查

格式特點適用場景
BMPWindows 原生,無壓縮,體積大桌面壁紙、簡單圖像
GIFLZW 壓縮、256 色、支援動畫/透明網頁圖示、簡單動畫
JPEG有損壓縮(DCT+Huffman),壓縮比高,不支援透明照片、真彩圖像
TIFF標籤式結構,支援多種壓縮、色彩空間,跨平台佳印刷、專業影像存檔
PNG無損壓縮、Alpha 通道、Gamma 校正、支援真彩/灰度/索引網頁透明圖像、截圖存檔

核心類別架構

  • Image:抽象基類,封裝載入、格式轉換、屬性查詢(GetWidth/Height)、縮略圖生成(GetThumbnailImage)。
  • Bitmap : Image:衍生類,新增像素級讀寫(GetPixel/SetPixel)、直接建構位圖、GDI 互操作。

DrawImage 核心重載與座標控制

// 基本繪製
graphics.DrawImage(&image, 10, 10);                    // 左上角 (10,10)
graphics.DrawImage(&image, Rect(130,10,w,h));          // 目標矩形,自動縮放填充

// 平行四邊形映射(旋轉/拉伸/透視基礎)
Point pts[] = { Point(0,0), Point(w,0), Point(0,h) }; // 對應源圖左上、右上、左下
graphics.DrawImage(&image, pts, 3);

三點定義平行四邊形,第四點由系統自動推導;若兩軸不垂直即產生剪切/透視效果。

矩陣變換實現旋轉縮放

Image img(L"sunflower.jpg");
Point pts[] = { Point(0,0), Point(img.GetWidth(),0), Point(0,img.GetHeight()) };
Matrix m(1,0,0,1,230,10);  // 平移至 (230,10)
m.Rotate(30);              // 順時針 30°
m.Scale(0.63f, 0.6f);      // 縮放
m.TransformPoints(pts, 3); // 套用變換
graphics.DrawImage(&img, pts, 3);

或直接使用 graphics.RotateTransform(30),但會影響後續所有繪圖操作。

插值模式與品質權衡

graphics.SetInterpolationMode(InterpolationModeNearestNeighbor);      // 低質量、最快
graphics.SetInterpolationMode(InterpolationModeHighQualityBilinear);  // 中等
graphics.SetInterpolationMode(InterpolationModeHighQualityBicubic);   // 高質量、最慢

縮放時自動插值,品質越高渲染越慢,按場景選擇。

縮略圖快速預覽

Image* thumb = img.GetThumbnailImage(50, 50, NULL, NULL);
graphics.DrawImage(thumb, 20, 20);
delete thumb; // 必須手動釋放

格式轉換與儲存

Image::Save(L"out.png", &encoderClsid, &params) 可輸出任意支援格式,配合 EncoderParameters 控制 JPEG 品質、PNG 壓縮等級。

GDI+ 以托管風格 API 包裝底層複雜性,配合 CImage(MFC 封裝)更貼合 VC 開發習慣,是 Windows 平台圖像處理的首選方案。

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