前面说了VisionPro分割图像的方法,再讲一下C#分割图像的方法。微软在.net框架中提供了Image这个类,里面有一些操作图像的方法,C#分割图像就要用到里面的方法,代码比较简单,一看就会。
为了方便我还是用前面的图像,分割效果如下:
分割代码如下:
复制
Dictionary<int, Image> imglist; private void button1_Click(object sender, EventArgs e) { pictureBox1.Image = Image.FromFile(Application.StartupPath+"/111.png"); imglist = new Dictionary<int, Image>(); for (int i = 0; i < 4;i++ ) { imglist.Add(i+1, cutImage(pictureBox1.Image,new Point(0,i*100),pictureBox1.Image.Width,100)); } } /// <summary> /// 截取图片区域,返回所截取的图片 /// </summary> /// <param name="SrcImage"></param> /// <param name="pos"></param> /// <param name="cutWidth"></param> /// <param name="cutHeight"></param> /// <returns></returns> private Image cutImage(Image SrcImage, Point pos, int cutWidth, int cutHeight) { Image cutedImage = null; //先初始化一个位图对象,来存储截取后的图像 Bitmap bmpDest = new Bitmap(cutWidth, cutHeight, PixelFormat.Format32bppRgb); Graphics g = Graphics.FromImage(bmpDest); //矩形定义,将要在被截取的图像上要截取的图像区域的左顶点位置和截取的大小 Rectangle rectSource = new Rectangle(pos.X, pos.Y, cutWidth, cutHeight); //矩形定义,将要把 截取的图像区域 绘制到初始化的位图的位置和大小 //rectDest说明,将把截取的区域,从位图左顶点开始绘制,绘制截取的区域原来大小 Rectangle rectDest = new Rectangle(0, 0, cutWidth, cutHeight); //第一个参数就是加载你要截取的图像对象,第二个和第三个参数及如上所说定义截取和绘制图像过程中的相关属性,第四个属性定义了属性值所使用的度量单位 g.DrawImage(SrcImage, rectDest, rectSource, GraphicsUnit.Pixel); //在GUI上显示被截取的图像 cutedImage = (Image)bmpDest; g.Dispose(); return cutedImage; }
显示第几张图像:
复制
pictureBox1.Image = imglist[1];
分割原理也是将你选择的区域给画到一张空白图像上,当然你可以一个像素一个像素的赋值,最后也会出现一样的结果。
评论 (4)
return img.Clone(rectangle, System.Drawing.Imaging.PixelFormat.DontCare);
用这个很快