C#图像裁剪、分割、保存

Posted

技术标签:

【中文标题】C#图像裁剪、分割、保存【英文标题】:C# images cropping,splitting,saving 【发布时间】:2010-05-24 05:06:15 【问题描述】:

如主题所述,我有一张图片:

    private Image testing;
    testing = new Bitmap(@"sampleimg.jpg");

我想将其拆分为 3 x 3 矩阵,这意味着总共 9 个图像并保存它。有任何提示或技巧可以做到这一点吗?我正在使用 Visual Studios 2008 并在智能设备上工作。尝试了一些方法,但我无法得到它。这是我尝试过的:

        int x = 0;
        int y = 0;
        int width = 3;
        int height = 3;


        int count = testing.Width / width;
        Bitmap bmp = new Bitmap(width, height);


        Graphics g = Graphics.FromImage(bmp);


        for (int i = 0; i < count; i++)
        
            g.Clear(Color.Transparent);
            g.DrawImage(testing, new Rectangle(0, 0, width, height), new Rectangle(x, y, width, height), GraphicsUnit.Pixel);
            bmp.Save(Path.ChangeExtension(@"C\AndrewPictures\", String.Format(".0.bmp",i)));
            x += width;
         

【问题讨论】:

我也试过这个:string path = @"C\AndrewPictures"; bmp.Save(Path.ChangeExtension(path, String.Format(".0.bmp",i)));但我得到错误 1 ​​方法 'Save' 没有重载需要 '1' 参数 【参考方案1】:

根据 .NET 版本,您可以执行以下操作之一进行裁剪:

.NET 2.0

private static Image cropImage(Image img, Rectangle cropArea)

   Bitmap bmpImage = new Bitmap(img);
   Bitmap bmpCrop = bmpImage.Clone(cropArea,
   bmpImage.PixelFormat);
   return (Image)(bmpCrop);

.NET 3.5+

// Create an Image element.
Image croppedImage = new Image();
croppedImage.Width = 200;
croppedImage.Margin = new Thickness(5);

// Create a CroppedBitmap based off of a xaml defined resource.
CroppedBitmap cb = new CroppedBitmap(     
   (BitmapSource)this.Resources["masterImage"],
   new Int32Rect(30, 20, 105, 50));       //select region rect
croppedImage.Source = cb;                 //set image source to cropped

如您所见,它比您所做的要简单一些。第一个示例克隆当前图像并获取其中的一个子集;第二个示例使用CroppedBitmap,它支持直接从构造函数中获取图像的一部分。

分割部分是简单的数学运算,只是将图像分割成9组坐标并传递给构造函数。

【讨论】:

+1 用于通过 Bitmap.Clone 进行裁剪,这是我用来从图像中提取小区域以显示 ROI 的方法,效果很好。 是的,我去过这个网站switchonthecode.com/tutorials/…我想我会坚持我的方法,只是我无法保存图像...... 并通过croppedImage.Margin = new Thickness(5);是指身高吗?我没有这个方法,我是不是缺少一些参考资料?

以上是关于C#图像裁剪、分割、保存的主要内容,如果未能解决你的问题,请参考以下文章

有没有很好的例子说明如何在 selenium webdriver C# 中截取屏幕截图,然后裁剪并保存图像?

在 C# 中裁剪和编辑图像

如何在c#中用多边形裁剪图像

如何在winforms c#中从图片框中裁剪和保存非矩形但多边形区域[重复]

使用 C# 裁剪图像

使用自定义参数在 Python 中多次裁剪图像