2011-01-30 62 views
2

我想剪切图片的特定部分,并使用它将裁剪后的图像与存储在HDD中的图像进行比较。问题是我不知道如何获取源图像的​​特定部分。我知道要裁剪的图像的位置(X,Y)。获取图像的特定部分(图片)

+0

当心 - 这是可能的,但效率低下。我曾经通过这样做减缓了ASP.NET应用程序的爬行速度。我最终创建了一个将大多数方法委托给原始位图但共享像素数据的“BitmapRegion”类。 – finnw 2011-01-30 21:29:20

+0

是的,如果你觉得这是你应用程序的瓶颈,那么这是一个好主意。我的例子复制图像。 – 2011-01-30 21:34:36

回答

17

这将加载原始文件并创建一个从(0,0)开始并且尺寸为64x64的裁剪版本。

Bitmap original = new Bitmap(@"C:\SomePath"); 
Rectangle srcRect = new Rectangle(0, 0, 64, 64); 
Bitmap cropped = (Bitmap)original.Clone(srcRect, original.PixelFormat); 

顺便说一句,你不指定,如果这是的WinForms或WPF,与WinForms的那么回事,因为我真的不知道WPF图像处理功能。

2

对于那些谁需要使用裁剪的形象,为自己的网站IMG标签内,你需要一些更多的代码(只是advicing,因为我需要它自己) 就拿上面加此代码:

byte[] imgbytes;  
using (MemoryStream stream = new MemoryStream()) 
{ 
     cropped.Save(stream, System.Drawing.Imaging.ImageFormat.Png); 
     imgbytes = stream.ToArray(); 
} 
<img src="@String.Format("data:image/png;base64,{0}", Convert.ToBase64String(imgbytes))" />