要自定義C# PictureBox的縮放方式,可以通過創建一個自定義的PictureBox控件并重寫其OnPaint方法來實現。在這個方法中,你可以使用Graphics對象的DrawImage方法,并傳入一個自定義的縮放算法。以下是一個示例:
首先,創建一個新的C#類庫項目,并添加一個名為CustomPictureBox
的新類。
修改CustomPictureBox
類,使其繼承自System.Windows.Forms.PictureBox
。
using System.Drawing;
using System.Windows.Forms;
public class CustomPictureBox : PictureBox
{
// ...
}
CustomPictureBox
類中,重寫OnPaint
方法。在這個方法中,使用Graphics.DrawImage
方法繪制圖像,并傳入一個自定義的縮放算法。protected override void OnPaint(PaintEventArgs pe)
{
if (Image != null)
{
// 獲取縮放后的圖像大小
Size scaledSize = GetScaledSize(Image.Size, ClientSize);
// 計算縮放后的圖像位置
Point imageLocation = new Point((ClientSize.Width - scaledSize.Width) / 2, (ClientSize.Height - scaledSize.Height) / 2);
// 創建一個新的矩形,表示縮放后的圖像區域
Rectangle destRect = new Rectangle(imageLocation, scaledSize);
// 使用自定義的縮放算法繪制圖像
pe.Graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
pe.Graphics.DrawImage(Image, destRect);
}
base.OnPaint(pe);
}
GetScaledSize
方法,該方法根據給定的原始大小和容器大小計算縮放后的大小。在這個示例中,我們使用保持寬高比的縮放方式。private Size GetScaledSize(Size originalSize, Size containerSize)
{
float widthRatio = (float)containerSize.Width / originalSize.Width;
float heightRatio = (float)containerSize.Height / originalSize.Height;
float scaleFactor = Math.Min(widthRatio, heightRatio);
int scaledWidth = (int)(originalSize.Width * scaleFactor);
int scaledHeight = (int)(originalSize.Height * scaleFactor);
return new Size(scaledWidth, scaledHeight);
}
CustomPictureBox
控件添加到你的窗體上,并設置其Image
屬性。現在,你已經創建了一個自定義的PictureBox控件,它會根據容器大小自動調整圖像的大小,并保持寬高比。你可以根據需要修改GetScaledSize
方法以實現不同的縮放算法。