近期写程序需要一个图片放大、缩小和移动的功能,上网查找参考了一些热心网友的资料,再结合自己的实际需要,写了一个class,用于直接在新窗口中显示、放大、缩小、保存图片的功能,这样的话以后使用的时候可以直接调用,代码记录如下:
引用:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Drawing; using System.Drawing.Imaging; using System.Windows.Forms; using System.IO;
其余代码:
    /// <summary>
    /// 用于显示图片,提供放大、缩小、移动、保存图片的功能
    /// </summary>
    class FK_ShowImg
    {
        Form F = new Form();
        PictureBox pictureBox = new PictureBox();
        int xPos;
        int yPos;
        bool MoveFlag;
        public void ShowImg(Bitmap bmp)
        {
            #region 定义FORM的基本属性
            F.Show();
            F.Text = "显示图片";
            F.Width = 1024;
            F.Height = 768;
            #endregion
            #region 创建菜单
            MenuStrip MS = new MenuStrip();
            ToolStripMenuItem tsmi = new ToolStripMenuItem("文件");
            //tsmi.Click += DemoClick;
            ToolStripMenuItem tsmi2 = new ToolStripMenuItem("图片另存为");
            tsmi2.Click += saveIMG;
            tsmi.DropDownItems.Add(tsmi2);
            MS.Items.Add(tsmi);
            F.Controls.Add(MS);
            #endregion
            #region 显示图片
            pictureBox.Image = bmp;
            pictureBox.MouseWheel += F_MouseWheel;   
            F.MouseWheel += F_MouseWheel;           
            pictureBox.MouseMove += F_MouseMove;   
            pictureBox.MouseDown += F_MouseDown;
            pictureBox.MouseUp += F_MouseUp;
            pictureBox.SizeMode = PictureBoxSizeMode.StretchImage;
            pictureBox.Width = 800;
            pictureBox.Height = 600;
            //图片居中
            pictureBox.Top = (F.ClientRectangle.Height - pictureBox.Height) / 2;
            pictureBox.Left = (F.ClientRectangle.Width - pictureBox.Width) / 2;
            F.Controls.Add(pictureBox); 
            #endregion
        }
        PRivate void F_MouseUp(object sender, MouseEventArgs e)
        {
            //throw new NotImplementedException();
            //鼠标已经抬起
            MoveFlag = false;
        }
        private void F_MouseDown(object sender, MouseEventArgs e)
        {
            //throw new NotImplementedException();
            this.pictureBox.Focus();
            MoveFlag = true;//已经按下.
            xPos = e.X;//当前x坐标.
            yPos = e.Y;//当前y坐标.
        }
        private void F_MouseMove(object sender, MouseEventArgs e)
        {
            //throw new NotImplementedException();
            //只在鼠标按下时绘制移动
            if (MoveFlag)
            {
                pictureBox.Left += Convert.ToInt16(e.X - xPos);//设置x坐标.
                pictureBox.Top += Convert.ToInt16(e.Y - yPos);//设置y坐标.
            }
        }
        //自己定义个保存图片的动作
        private void saveIMG(object sender, EventArgs e)
        {
            SaveFileDialog saveFileDialog = new SaveFileDialog();
            saveFileDialog.Filter = "Jpg 图片|*.jpg|Bmp 图片|*.bmp|Gif 图片|*.gif|Png 图片|*.png|Wmf  图片|*.wmf";
            saveFileDialog.FilterIndex = 0;
            if (pictureBox.Image == null)
            {
                MessageBox.Show("没有预览图片!", "提示:", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else if (saveFileDialog.ShowDialog() == DialogResult.OK)
            {
                if (pictureBox.Image != null)
                {
                    pictureBox.Image.Save(saveFileDialog.FileName, System.Drawing.Imaging.ImageFormat.Jpeg);
                }
            }
        }
        private void F_MouseWheel(object sender, MouseEventArgs e)
        {
            //判断上滑还是下滑
            if (e.Delta < 0)
            {
                //计算缩放大小
                this.pictureBox.Width = this.pictureBox.Width * 9 / 10;
                this.pictureBox.Height = this.pictureBox.Height * 9 / 10;
            }
            else
            {
                this.pictureBox.Width = this.pictureBox.Width * 11 / 10;
                this.pictureBox.Height = this.pictureBox.Height * 11 / 10;
            }
        }
    }主程序中直接使用时:
FK_ShowImg F = new FK_ShowImg(); Bitmap bmp = (Bitmap)Bitmap.FromFile(@"D:\temp\test.png"); F.ShowImg(bmp);
结果显示如下:

