图像放大镜控件






4.45/5 (5投票s)
ImageMagnifier - 一个简单的图像缩放控件。
引言
常用的 PictureBox
控件,经常用于 .NET Windows Forms 应用程序中,是一个非常实用且复杂的控件,允许我们显示图形信息。但没有什么是完美的,PictureBox
也有其自身的缺点。其中之一,我遇到的问题是缩放时图像模糊。当你尝试缩放小尺寸图片时,它看起来会变得模糊不清。因此,我决定编写一个简单的图像缩放控件,并将其命名为 ImageMagnifier
。
使用代码
ImageMagnifier
是一个 WinForms 控件,可以像任何其他控件一样使用。只需在新的项目中添加对 ImageMagnifier.dll 程序集的引用。然后,你可以通过从 Visual Studio 工具箱中拖动它来将控件添加到你的窗体中,或者你可以使用如下代码以编程方式创建它
ImageMagnifier.ImageMagnifier imageMagnifier =
new ImageMagnifier.ImageMagnifier();
this.Controls.Add(imageMagnifier);
ImageMagnifier
具有一个 ImageToMagnify
属性,它对应于一个 Image
类。你可以在项目的属性窗口中或以编程方式设置它
imageMagnifier.ImageToMagnify = Image.FromFile("SomeImage.jpg");
然后,你必须设置 MagnificationCoefficient
属性。它是一个 Int32
值,取值范围为 1 到 64
imageMagnifier.MagnificationCoefficient = 10;
这就是你需要做的全部。运行你的应用程序后,你将看到定义的图像,以 MagnificationCoefficient
倍数放大。
工作原理
该控件非常简单。它继承自 Control
类并重写了 OnPaint
方法。与 ImageMagnifier
关联的图像表示为二维 Int32
像素数组 (ImageMagnifier.pixels
)。每当用户定义 ImageToMagnify
属性时,该数组都会填充相应像素的颜色
public Image ImageToMagnify
{
get { return imageToMagnify; }
set
{
if (value != null)
{
imageToMagnify = value;
Bitmap b = new Bitmap(this.ImageToMagnify);
pixels = new int[this.ImageToMagnify.Width,
this.ImageToMagnify.Height];
for (int i = 0; i < this.ImageToMagnify.Width; i++)
for (int j = 0; j < this.ImageToMagnify.Height; j++)
{
pixels[i, j] = b.GetPixel(i, j).ToArgb();
}
this.Invalidate();
}
}
}
OnPaint
方法如下
protected override void OnPaint(PaintEventArgs pe)
{
if (imageToMagnify != null)
{
this.Width = imageToMagnify.Width * magnificationCoefficient;
this.Height = imageToMagnify.Height * magnificationCoefficient;
int currentTop = 0;
int currentLeft = 0;
for (int i = 0; i < this.ImageToMagnify.Width; i++)
{
currentTop = i * magnificationCoefficient;
for (int j = 0; j < this.ImageToMagnify.Height; j++)
{
currentLeft = j * magnificationCoefficient;
Brush b = new SolidBrush(Color.FromArgb(pixels[i, j]));
pe.Graphics.FillRectangle(b, currentTop, currentLeft,
magnificationCoefficient, magnificationCoefficient);
}
}
}
}
因此,每次控件调用 OnPaint
方法时,它都会从 pixels
数组中为每个像素绘制矩形。每个矩形的大小由 MagnificationCoefficient
属性确定。