一拖二的小小世界 2022-10-17 17:11 采纳率: 0%
浏览 34

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

```

  • 写回答

4条回答 默认 最新

  • 於黾 2022-10-17 17:19
    关注

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

    评论

报告相同问题?

问题事件

  • 创建了问题 10月17日

悬赏问题

  • ¥15 鼠标右键,撤销删除 复制 移动,要怎样删除
  • ¥15 使用MATLAB进行余弦相似度计算加速
  • ¥15 服务器安装php5.6版本
  • ¥15 我想用51单片机和数码管做一个从0开始的计数表 我写了一串代码 但是放到单片机里面数码管只闪烁一下然后熄灭
  • ¥20 系统工程中,状态空间模型中状态方程的应用。请猛男来完整讲一下下面所有问题
  • ¥15 我想在WPF的Model Code中获取ViewModel Code中的一个参数
  • ¥15 arcgis处理土地利用道路 建筑 林地分类
  • ¥20 使用visual studio 工具用C++语音,调用openslsx库读取excel文件的sheet问题
  • ¥100 寻会做云闪付tn转h5支付链接的技术
  • ¥15 DockerSwarm跨节点无法访问问题