如何实现框选图片的某个部位
然后放大或者缩小?高手指点,急用

解决方案 »

  1.   

    框选
    private GraphicsPath gp = new GraphicsPath();MouseMove:           preview.Refresh();
                gp.Reset();
                gp.AddRectangle(new Rectangle(p0.X, p0.Y, Math.Abs(p0.X - p1.X), Math.Abs(p0.Y - p1.Y)));
                Graphics g = preview.CreateGraphics();
                Pen pen = new Pen(Color.Red, 1.0f);
                g.DrawPath(pen, gp);
                g.Dispose();
    MouseDown:
                preview.Refresh();
                gp.Reset();需要注意处理起始点和终止点的位置问题(比如,用户从右下拖到左上)
    框选好以后你可以用Graphics类的DrawImage得到框选好的图像。同样还是DrawImage实现放大缩小。//剪裁
           public static Bitmap KiCut(Bitmap b, int StartX, int StartY, int iWidth, int iHeight)
            {
                if (b == null)
                {
                    return null;
                }            int w = b.Width;
                int h = b.Height;            if (StartX >= w || StartY >= h)
                {
                    return null;
                }            if (StartX + iWidth > w)
                {
                    iWidth = w - StartX;
                }            if (StartY + iHeight > h)
                {
                    iHeight = h - StartY;
                }            Bitmap bmpOut = new Bitmap(iWidth, iHeight, PixelFormat.Format24bppRgb);            Graphics g = Graphics.FromImage(bmpOut);
                g.DrawImage(b, new Rectangle(0, 0, iWidth, iHeight), new Rectangle(StartX, StartY, iWidth, iHeight), GraphicsUnit.Pixel);
                g.Dispose();            return bmpOut;
            }
    //重设大小
            public static Bitmap KiResizeImage(Bitmap bmp, int newW, int newH)
            {
                try
                {
                    Bitmap b = new Bitmap(newW, newH);
                    Graphics g = Graphics.FromImage(b);                //强制用效果最好的插值算法
                    g.InterpolationMode = InterpolationMode.HighQualityBicubic;                g.DrawImage(bmp, new Rectangle(0, 0, newW, newH), new Rectangle(0, 0, bmp.Width, bmp.Height), GraphicsUnit.Pixel);
                    g.Dispose();                return b;
                }
                catch
                {
                    return null;
                }
            }
    需要的话,最后再把得到的Bitmap重新画到PictureBox里。
      

  2.   

    picturebox控件,acdsee控件,图片控件;
    用C#开发的图片控件,功能类似acdsee;
    支持各种图片的浏览,放大,缩小,平移等功能;
    源代码参考:http://shop.paipai.com/359073000