获取图像(图片)的特定部分

3

我想要裁剪图片的特定部分,并将其用于与硬盘中存储的另一张图片进行比较。问题是我不知道如何获取源图像的特定部分。我知道要裁剪的图像的位置(X,Y)。


注意 - 这是可行的,但效率低下。我曾经通过这种方式将一个ASP.NET应用程序变得非常缓慢。最终,我创建了一个“BitmapRegion”类,它将大多数方法委托给原始位图但共享像素数据。 - finnw
是的,如果您发现这是应用程序的瓶颈,那么类似这样的做法是一个不错的主意。我的示例复制了图像。 - Ed S.
2个回答

18

这将加载原始图像并创建一个裁剪版本,从(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的图像处理函数。


9
你的大写锁定键被卡住了。 - Cody Gray
它显示一个错误:错误1 无法隐式转换类型 'System.Drawing.Image' 为 'System.Drawing.Bitmap'。存在显式转换(是否缺少强制转换?) - Farid-ur-Rahman
抱歉,您需要强制转换 Bitmap.FromFile 的返回值,因为该方法来自 Image 类。我改成只使用构造函数了,当时有点晚了 :) - Ed S.

2

对于那些需要在img标签中使用裁剪后的图像的人,您需要一些额外的代码(仅供参考,因为我自己也需要它)。 将上面的代码与以下代码一起使用:

 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))" />

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接