Esempio n. 1
0
        /// <summary>
        /// 改变放大倍率时的放大区域自调整,为了提高精度,插件设置范围是10-100,对应1-10倍,这样可以0.1倍精度调整
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Magnivalue_ValueChanged(object sender, EventArgs e)
        {
            //直接根据放大区域的图的中心找到左上角
            float target_X = Mouse_X - magniBox.Width / (2 * (magnivalue.Value / 10));
            float target_Y = Mouse_Y - magniBox.Height / (2 * (magnivalue.Value / 10));

            #region 提取根据放大倍数得到的区域图片
            //建立新的图片
            Bitmap b = new Bitmap(magniBox.Width / (magnivalue.Value / 10), magniBox.Height / (magnivalue.Value / 10));
            //建立画布,在画布上建立图形
            Graphics g = Graphics.FromImage((System.Drawing.Image)b);

            g.InterpolationMode = InterpolationMode.HighQualityBilinear;

            RectangleF srcRect = new RectangleF(target_X, target_Y, target_X + magniBox.Width / (magnivalue.Value / 10),
                                                target_Y + magniBox.Height / (magnivalue.Value / 10)); //显示图像那一部分
            GraphicsUnit units = GraphicsUnit.Pixel;                                                   //源矩形的度量单位设置为像素
            //绘制图像,可用的方法有很多
            g.DrawImage(origin_Pic.GetImage, 0, 0, srcRect, units);
            //释放内存
            g.Dispose();
            GC.Collect();
            #endregion

            //将整个区域的图调整大小
            magniBox.Image = PicFunction.resizeImage((System.Drawing.Image)b, magniBox.Size);
        }
Esempio n. 2
0
        /// <summary>
        /// //获取鼠标所在的位置并提取图片
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>鼠标数据,X、Y从中提取
        private void OriPicBox_MouseMove(object sender, MouseEventArgs e)
        {
            //无图片时不提取
            if (origin_Pic == null)
            {
                return;
            }
            Mouse_X = e.X;
            Mouse_Y = e.Y;
            //根据鼠标位置反推计算原图上对应的位置,并根据放大倍数来确定对应矩形的左上角顶点,
            float target_X = e.X / nPercentW - magniBox.Width / (2 * (magnivalue.Value / 10));
            float target_Y = e.Y / nPercentH - magniBox.Height / (2 * (magnivalue.Value / 10));

            #region 提取根据放大倍数得到的区域图片
            //建立新的图片
            Bitmap b = new Bitmap(magniBox.Width / (magnivalue.Value / 10), magniBox.Height / (magnivalue.Value / 10));
            //建立画布,在画布上建立图形
            Graphics g = Graphics.FromImage((System.Drawing.Image)b);

            g.InterpolationMode = InterpolationMode.HighQualityBilinear;

            RectangleF srcRect = new RectangleF(target_X, target_Y, target_X + magniBox.Width / (magnivalue.Value / 10),
                                                target_Y + magniBox.Height / (magnivalue.Value / 10)); //显示图像那一部分
            GraphicsUnit units = GraphicsUnit.Pixel;                                                   //源矩形的度量单位设置为像素
            //绘制图像,可用的方法有很多
            g.DrawImage(origin_Pic.GetImage, 0, 0, srcRect, units);
            //释放内存
            g.Dispose();
            GC.Collect();
            #endregion

            //将整个区域的图调整大小
            magniBox.Image = PicFunction.resizeImage((System.Drawing.Image)b, magniBox.Size);
        }
Esempio n. 3
0
 /// <summary>
 /// 读取图片
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void ReadButton_Click(object sender, EventArgs e)
 {
     #region 读取图片
     OpenFileDialog openFileDialog1 = new OpenFileDialog();
     openFileDialog1.Filter = "图像文件|*.jpg;*.bmp;*.png;*.jpeg";
     openFileDialog1.Title  = "打开图像";
     if (openFileDialog1.ShowDialog() == DialogResult.OK)
     {
         //以前用的Image img,然后origin_Image=img
         //并在最后img.dipose释放后,因为指向的同一个对象,此时origin_Image也没有东西了
         //为了提高内存使用率,就不再单独声明一个Image,如果一定要生命的话,就必须使用Clone
         //Image img = (Image)origin_Image.Clone();
         origin_Pic      = new PicProperty(openFileDialog1.FileName, Image.FromFile(openFileDialog1.FileName, true));
         oriPicBox.Image = PicFunction.resizeImage(origin_Pic.GetImage, oriPicBox.Size);
         //计算宽度的缩放比例
         nPercentW = oriPicBox.Width / (float)origin_Pic.Width;
         //计算高度的缩放比例
         nPercentH = oriPicBox.Height / (float)origin_Pic.Height;
         //显示数据
         PicPropertyGrid.SelectedObject = origin_Pic;
     }
     #endregion
 }