在圖像處理應用中,為圖片添加裝飾性邊框是常見需求。本文將展示如何使用 C# 的 GDI+ 繪圖功能,為載入的圖片繪製矩形與橢圓相框效果,並說明關鍵繪圖參數的設定技巧。
主要步驟如下:
Bitmap 物件。Graphics 物件進行繪圖操作。///
/// 為圖片添加矩形相框
///
/// 圖片路徑
/// 目標 PictureBox 控制項
public void AddRectangularFrame(string imagePath, PictureBox pic)
{
try
{
using (Bitmap backBmp = new Bitmap(imagePath))
{
// 邊框寬度設為圖片寬度的 20%
float borderWidth = backBmp.Width * 0.2f;
using (Graphics g = Graphics.FromImage(backBmp))
using (Brush brush = new SolidBrush(Color.FromArgb(0, 156, 255))) // 亮藍色
using (Pen pen = new Pen(brush, borderWidth))
{
pen.DashStyle = DashStyle.Custom; // 可自定義虛線樣式
g.DrawRectangle(pen, new Rectangle(0, 0, backBmp.Width, backBmp.Height));
}
pic.BackgroundImage = backBmp;
}
}
catch (Exception ex)
{
// 建議記錄日誌而非靜默吞噬
Debug.WriteLine($"添加矩形相框失敗: {ex.Message}");
}
}
///
/// 為圖片添加橢圓相框
///
public void AddEllipseFrame(string imagePath, PictureBox pic)
{
try
{
using (Bitmap backBmp = new Bitmap(imagePath))
{
float borderWidth = backBmp.Width * 0.2f;
using (Graphics g = Graphics.FromImage(backBmp))
using (Brush brush = new SolidBrush(Color.FromArgb(0, 156, 255)))
using (Pen pen = new Pen(brush, borderWidth))
{
pen.DashStyle = DashStyle.Custom;
g.DrawEllipse(pen, new Rectangle(0, 0, backBmp.Width, backBmp.Height));
}
pic.BackgroundImage = backBmp;
}
}
catch (Exception ex)
{
Debug.WriteLine($"添加橢圓相框失敗: {ex.Message}");
}
}
using 確保資源釋放Bitmap、Graphics、Pen、Brush 皆實作 IDisposable,務必包裹在 using 區塊中,避免 GDI+ 物件洩漏導致「generic GDI+ error」。
採用 backBmp.Width * 0.2f 使邊框隨圖片尺寸自適應,比固定像素值更具彈性。
Color.FromArgb(0, 156, 255) 定義專屬品牌色。DashStyle.Custom 可搭配 pen.DashPattern 實現虛線、點線等多樣化效果。避免空 catch 區塊,至少記錄異常資訊,便於排查生產環境問題。
GraphicsPath 實現圓角矩形、多邊形等複雜形狀。透過 GDI+ 的 Graphics.DrawRectangle 與 DrawEllipse 方法,結合適當的資源管理與參數化設計,即可輕鬆實現圖片相框功能。本文提供的封裝方法可直接整合至 WinForms 專案,並易於擴展更多裝飾效果。