使用winform的picturebox显示图像,并加入鼠标滚轮缩放功能,但是放大后,图像变得模糊,请问哪位知道,有什么方法可以让放大后的图像清晰吗?
我生成图像后保存到本地,用微信打开并放大后,得到很清晰的图像:
但是在我控件里进行放大,就很模糊:
鼠标缩放代码如下:
```c#
private void pictureBox1_MouseWheel(object sender, MouseEventArgs e)//图片缩放
{
if (this.pictureBox1.Image != null)
{
int x = e.Location.X;
int y = e.Location.Y;
int ow = pictureBox1.Width;
int oh = pictureBox1.Height;
int VX, VY; //因缩放产生的位移矢量
if (e.Delta > 0) //放大
{
//if ((pictureBox1.Width / Gloabal.XMaxInit) > 4)
//{
// return;
//}
//第①步
pictureBox1.Width += Gloabal.XzoomStep;
pictureBox1.Height += Gloabal.YzoomStep;
//第②步
PropertyInfo pInfo = pictureBox1.GetType().GetProperty("ImageRectangle", BindingFlags.Instance |
BindingFlags.NonPublic);
Rectangle rect = (Rectangle)pInfo.GetValue(pictureBox1, null);
//第③步
pictureBox1.Width = rect.Width;
pictureBox1.Height = rect.Height;
}
if (e.Delta < 0) //缩小
{
//防止一直缩成负值
if ((pictureBox1.Width / Gloabal.XMaxInit) < 2)
{
return;
}
pictureBox1.Width -= Gloabal.XzoomStep;
pictureBox1.Height -= Gloabal.YzoomStep;
PropertyInfo pInfo = pictureBox1.GetType().GetProperty("ImageRectangle", BindingFlags.Instance |
BindingFlags.NonPublic);
Rectangle rect = (Rectangle)pInfo.GetValue(pictureBox1, null);
pictureBox1.Width = rect.Width;
pictureBox1.Height = rect.Height;
}
//第④步,求因缩放产生的位移,进行补偿,实现锚点缩放的效果
VX = (int)((double)x * (ow - pictureBox1.Width) / ow);
VY = (int)((double)y * (oh - pictureBox1.Height) / oh);
pictureBox1.Location = new System.Drawing.Point(pictureBox1.Location.X + VX, pictureBox1.Location.Y + VY);
Gloabal.XLocation = pictureBox1.Location.X;
Gloabal.YLocation = pictureBox1.Location.Y;
Gloabal.XMax = pictureBox1.Width;
Gloabal.YMax = pictureBox1.Height;
}
}
```