• usingSystem;//来源于www.uzhanbao.com usingSystem.Collections.Generic; usingSystem.ComponentModel; usingSystem.Data; usingSystem.Text; usingSystem.Windows.Forms; usingSystem.Drawing;...usingSystem.D...

    using System;//来源于www.uzhanbao.com
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Text;
    using System.Windows.Forms;
    using System.Drawing;
    using System.Drawing.Drawing2D;
    using System.Drawing.Imaging;

    namespace ImageLoader
    {
        public partial class Form1 : Form
        {

            private Rectangle selectedArea;
            private Image loadedImage;
            private Color selectionColor;
            private int count = 10;

            public Form1()
            {
                InitializeComponent();
                this.MouseWheel +=new MouseEventHandler(picBox1_MouseWheel);
                picBox1.SizeMode = PictureBoxSizeMode.Zoom;
            }

            private void openToolStripMenuItem_Click(object sender, EventArgs e)
            {
                if (openFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    if (loadedImage != null)
                    {
                        loadedImage.Dispose();
                    }
                    try
                    {

                        loadedImage = Image.FromFile(openFileDialog1.FileName);

                        //Get a contrasting color for the image selection marker
                        using (Bitmap bmp = new Bitmap(loadedImage))
                        {
                            selectionColor = GetDominantColor(bmp, false);
                            selectionColor = CalculateOppositeColor(selectionColor);
                        }

                        ///tZoom.Value = 1;

                        //resizePictureArea();



                        //Map the area selected in the thumbail to the actual image size
                        Rectangle zoomArea = new Rectangle();
                        Rectangle localArea = new Rectangle();

                        zoomArea.Width = loadedImage.Width;
                        zoomArea.Height = loadedImage.Height;
                        
                        

                        int aScale;
                        aScale = loadedImage.Width / picBox1.Width;

                        localArea.Width = picBox1.Width;
                        localArea.Height = loadedImage.Height/aScale;
                        picBox1.Image = ZoomImage(loadedImage, zoomArea, localArea);
                        picBox1.Refresh();

                    }
                    catch (Exception)
                    {
                        MessageBox.Show("图片太大,请缩小图片尺寸!");
                    }
                }
            }

            private Image ZoomImage(Image input, Rectangle zoomArea, Rectangle sourceArea)
            {
                Bitmap newBmp = new Bitmap(sourceArea.Width, sourceArea.Height);

                using (Graphics g = Graphics.FromImage(newBmp))
                {
                    //high interpolation
                    g.InterpolationMode = InterpolationMode.HighQualityBicubic;

                    g.DrawImage(input, sourceArea, zoomArea, GraphicsUnit.Pixel);
                }

                return newBmp;
            }

            private Color GetDominantColor(Bitmap bmp, bool includeAlpha)
            {
                // GDI+ still lies to us - the return format is BGRA, NOT ARGB.
                BitmapData bmData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height),
                                               ImageLockMode.ReadWrite,
                                               PixelFormat.Format32bppArgb);

                int stride = bmData.Stride;
                IntPtr Scan0 = bmData.Scan0;

                int r = 0;
                int g = 0;
                int b = 0;
                int a = 0;
                int total = 0;

                unsafe
                {
                    byte* p = (byte*)(void*)Scan0;

                    int nOffset = stride - bmp.Width * 4;
                    int nWidth = bmp.Width;

                    for (int y = 0; y < bmp.Height; y++)
                    {
                        for (int x = 0; x < nWidth; x++)
                        {
                            r += p[0];
                            g += p[1];
                            b += p[2];
                            a += p[3];

                            total++;

                            p += 4;
                        }
                        p += nOffset;
                    }
                }

                bmp.UnlockBits(bmData);

                r /= total;
                g /= total;
                b /= total;
                a /= total;

                if (includeAlpha)
                    return Color.FromArgb(a, r, g, b);
                else
                    return Color.FromArgb(r, g, b);
            }

            /// <summary>
            /// Calculates the opposite color of a given color. 
            /// Source: http://dotnetpulse.blogspot.com/2007/01/function-to-calculate-opposite-color.html
            /// </summary>
            /// <param name="clr"></param>
            /// <returns></returns>
            private Color CalculateOppositeColor(Color clr)
            {
                return Color.FromArgb(255 - clr.R, 255 - clr.G, 255 - clr.B);
            }

            /// <summary>
            /// Constricts a set of given dimensions while keeping aspect ratio.
            /// </summary>
            private Size ShrinkToDimensions(int originalWidth, int originalHeight, int maxWidth, int maxHeight)
            {
                int newWidth = 0;
                int newHeight = 0;

                if (originalWidth >= originalHeight)
                {
                    //Match area width to max width
                    if (originalWidth <= maxWidth)
                    {
                        newWidth = originalWidth;
                        newHeight = originalHeight;
                    }
                    else
                    {
                        newWidth = maxWidth;
                        newHeight = originalHeight * maxWidth / originalWidth;
                    }
                }
                else
                {
                    //Match area height to max height
                    if (originalHeight <= maxHeight)
                    {
                        newWidth = originalWidth;
                        newHeight = originalHeight;
                    }
                    else
                    {
                        newWidth = originalWidth * maxHeight / originalHeight;
                        newHeight = maxHeight;
                    }
                }

                return new Size(newWidth, newHeight);

            }

            //private void Form1_Load(object sender, EventArgs e)
            //{
            //    picBox1.SizeMode = PictureBoxSizeMode.StretchImage;
            //}

            private void Form1_Resize(object sender, EventArgs e)
            {
                //StretchImage;

                //picBox1.SizeMode = PictureBoxSizeMode.AutoSize;
                int x = this.Width - 20;
                int y = this.Height - 70;
                //label1.Location = new Point(x, y); 
                picBox1.Width = this.Width - 10;
                picBox1.Height = this.Height - 27;

                Rectangle zoomArea = new Rectangle();
                Rectangle localArea = new Rectangle();

                zoomArea.Width = loadedImage.Width;
                zoomArea.Height = loadedImage.Height;


                int aScale; //这样简单处理可能会有问题
                aScale = loadedImage.Width / picBox1.Width;

                localArea.Width = picBox1.Width;
                localArea.Height = loadedImage.Height / aScale;
                picBox1.Image = ZoomImage(loadedImage, zoomArea, localArea);
                picBox1.Refresh();
            }

            private void picBox1_MouseWheel(object sender, MouseEventArgs e)
            {
                //MessageBox.Show("收到");
                zoom(e.Delta);
            }

            private void zoom(int delta)
            {
                if (delta >= 1)
                {
                    resize(++count);
                }
                else if(delta <=-1)
                {
                    resize(--count);
                }
            }

            private void resize(int c)
            {
                //窗体宽高作为参照,所以窗体宽高不能变,可以考虑用其他作参照物,窗体和图片一起放大缩小
                int w = this.Width;
                int h = this.Height;
                decimal percent = (decimal)(c + 100)/(decimal)100;
                decimal width = percent*w;
                decimal height = percent * h;
                picBox1.Width = Convert.ToInt32(width);
                picBox1.Height = Convert.ToInt32(height);
                panel1.Width = this.Width-10;
                panel1.Height = this.Height-60;
                if (panel1.Height < picBox1.Height || panel1.Width < picBox1.Width)
                {
                    panel1.AutoScroll = true;
                }
               
            }
        }
    }

    展开全文
  • C#图像中心缩放与移动 2017-04-18 16:09:04
    C#中使用Graphics可以很方便的绘图,在绘完图后,往往需要对图进行缩放和移动。缩放时,将鼠标当前的位置作为缩放的中心来缩放,看效果图 中心缩放的核心在于计算图形新的原点,请看代码 public partial class ...
  • C#鼠标缩放图片 2020-03-31 23:30:16
    C#鼠标缩放图片
  • C# 通过鼠标实现放大图片和移动图片,内附有源码和exe,实现鼠标滚轮放大和图片平移
  •   最近接触了一下C# 的内容,遇到一个需求,就是关于图像的的缩放。查找了网上的一些资源,发现这些方法存在一些或多或少的问题。所以今天花点时间把自己查阅资料和实践的心得分享出来,希望对有需要的人有所帮助...
  • 对于一个图片查看器来说,鼠标拖动和滚动缩放也就是说可以鼠标在程序界面上拖动图片,通过鼠标滚轮放大和缩小图片。这两种功能在图片浏览程序里面再普通不过了。那怎么用C#来进行实现。 通过操作你也知道,缩放的...
  • C#实现率鼠标缩放平移图像,内有代码注释,使用的GDI+的变换矩阵方式实现,放大缩小平移图像基本无延迟。
  • c# 鼠标拖动缩放图片 2015-11-27 10:42:16
    通过鼠标操作改变pictureBox1的 大小和位置来调整里面图片缩放和拖动 Bitmap myBmp; Point mouseDownPoint = new Point(); //记录拖拽过程鼠标位置 bool isMove = false; //判断鼠标在picturebox上移动时,是否...
  • 1、缩放 private void ImageShow_Load(object sender, EventArgs e) { pictureBox1.Load(@"E:\SQ1.jpg"); pictureBox1.SizeMode = PictureBoxSizeMode.Zoom; pict...
  • 很简单的图片浏览,很基础的事件控制。 支持鼠标滚轮缩放; 支持鼠标拖动; 鼠标拖动范围限制; 定时触发工具条; …… 编写工具:VS2005
  • 在这个项目中需要绘制折线图,由于数据比较大,需要对图表进行缩放操作,以鼠标为中心对图表进行缩放,在网上查找了一些资料没找到我想要的,于是自己想了一个解决方案,可以基本实现,但略显繁琐,由于刚开始学习C#,...
  • 一个完整的C#调用HALCON的DEMO,附件我删除了halcondotnet.dll,直接在项目里添加引用就好,支持halcon10,halcon11,halcon12,我用的是vs2010,demo需要vs2010或高一点的版本打开,程序无错误 DEMO实现的主要功能...
  • 我想是通过滚动鼠标滚轮,按比例缩放图像,但在缩小图像中出现一个奇怪的现场,比如我一直在向上滚动滚轮,zoom的值变化是:1→0.9→0.8→0.6999999→0.5999999,我 奇怪的是为什么会出现0.6999999而不是0.7,这是...
  • //************************************************************// .../// 缩小图片 /// /// 源图文件名(包括路径) /// 缩小后保存为文件名(包括路径) /// 缩小至宽度 /// 缩小至高度
  • 主要注意获取的鼠标坐标是相对于整个电脑屏幕的,还是相对于当前操作的窗口的,使用PointToScreen函数和PointToClient函数进行坐标变换。 using System; using System.Collections.Generic; using System.Component...
  • 开发环境:VS2019\WPF\halcon12 在WPF中使用halcon12的控件,实现读取的图片鼠标滚动缩放。 本例程功能单一,代码简洁,对比起网上其它功能复杂的例程更有利于帮助新手学习如何实现图片缩放功能。
  • 当然,就是别忘了一点,如果直接写MouseWheel事件是不行的,因为如果把鼠标放在pictureBox上时,当前焦点是窗体,而不是pictureBox,所以还要加一个MouseEnter事件 对于滚轮事件有一点,就是用e.Delta的数值正负来...
  • halcon与C#联合编程之鼠标控制图片缩放,拖动,画roi可交互ROI,使用时请将halcondotnet.dll halcon.dll 放到debug文件夹下
  • 1. 界面设计 如图1 所示:一个名为...目前实现的功能有:图片的灰度化,鼠标滚轮控制图片缩放鼠标控制图像平移。 图1 图2 2. 打开图像 该部分的具体实现流程:双击主界面的空白部分=》弹出选择图片对话框=...
  • 核心步骤:①新建Point类型全局变量mouseDownPoint,记录拖拽过程中鼠标位置;②MouseDown事件记录Cursor位置;③MouseMove事件计算移动矢量,并更新pictureBox1.Location。代码:private void pictureBox1_...
1 2 3 4 5 ... 20
收藏数 2,800
精华内容 1,120