EKsumic's Blog

let today = new Beginning();

Click the left button to use the catalog.

OR

C#实现切割图片

裁切其实是重新作图,需要引入原图,然后选定区域,用画笔重新画一遍图片。

这个东西,并不是我们理解的真正裁剪下来,实际上程序的操作逻辑是画图。

第一步,取得源图片:

Bitmap srcImg = new Bitmap(@"charas.png");

第二步,自定义想获得的目标图片的大小:

Bitmap bitmap = new Bitmap(50,50);

第三步,把你自定义要的图片加入graphic(画笔) :

Graphics graphic = Graphics.FromImage(bitmap);    

第四步,从源图像里面读取特定区域,并输出指定大小的图像:

graphic.DrawImage(srcImg, new Rectangle(0, 0, 50, 50), new Rectangle(52, 0, 50, 50), GraphicsUnit.Pixel);

第五步,保存图像:

bitmap.Save(@"test.png");

最后,释放内存:

bitmap.Dispose();
srcImg.Dispose();
graphic.Dispose();

完整代码:

//先取得源图片
Bitmap srcImg = new Bitmap(@"charas.png");
//自定义你要获得图片size
Bitmap bitmap = new Bitmap(50,50);

//把你自定义要的图片加入graphic 
Graphics graphic = Graphics.FromImage(bitmap);    
//参数1,原图片实体;参数2,目标图片rect;参数3,原图片rect;参数4,逐像素;
graphic.DrawImage(srcImg, new Rectangle(0, 0, 50, 50), new Rectangle(52, 0, 50, 50), GraphicsUnit.Pixel);
//上面的操作就是从源图片目标(0,0)的位置截取了50*50的图,然后传给了grapic实体里的bitmap

//保存图像   
bitmap.Save(@"test3.png");

//现在bitmap是你得到的值

//这里你就看情况释放内存了,graphic倒是可以直接丢掉,两个bitmap如果你还用的话先别dispose
//bitmap.Dispose();
//srcImg.Dispose();
graphic.Dispose();
//我这里再补充一下,bitmap是定义的画布的大小,无论你定义多大,它只会从(0,0)开始画一个50*50的图像在上面
//这才是DrawImage第二个参数的意义

 

参考来源:

[1] C# Graphics类详解

[2]C#实现自动切割图片

[3] C#切割指定区域图片操作

[4] C# 截取图片区域,并返回所截取的图片

[5] C# Graphics对象调用Dispose()方法后,为什么绘制的图像还在?

This article was last edited at 2020-09-02 03:26:21

* *