c# 图像放大后模糊问题

使用winform的picturebox显示图像,并加入鼠标滚轮缩放功能,但是放大后,图像变得模糊,请问哪位知道,有什么方法可以让放大后的图像清晰吗?

我生成图像后保存到本地,用微信打开并放大后,得到很清晰的图像:

img

但是在我控件里进行放大,就很模糊:

img

鼠标缩放代码如下:


```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;
            }
        }

```

你的图片是jpg格式的还是png格式的
感觉是图片本身压缩的太厉害了,本身就不清楚
还有
pictureBox1.Width += Gloabal.XzoomStep;
pictureBox1.Height += Gloabal.YzoomStep;
这两步之后不就已经放大了,后面在干什么呀

我这个是读取excle的矩阵来转换成图像的,我生成图像后保存到本地一份图像文件,bmp和png都是一样的效果

pictureBox 只不过是图片的容器,你通过改变 pictureBox 的尺寸去达到缩放图片的目的,不觉得舍近求远了吗?
Bitmap 本身就有缩放功能,为何不用?
一般都在 Paint事件中重绘图片双三次采样应付缩放足够了

栅格图片放大肯定会有毛边
百度“无损放大图片算法”---------------当然就看你本身的要求了。就像楼上说的3次采样插值不挑剔的用户可以用

如果说客户比较挑剔,你的选比较高级的无损放大算法了。