从较大的图像中裁剪出一个矩形

Posted

技术标签:

【中文标题】从较大的图像中裁剪出一个矩形【英文标题】:Cropping a rectangle out of a larger image 【发布时间】:2013-05-28 16:45:28 【问题描述】:

我正在使用我在另一个 *** 问题中找到的代码变体,从指定位置的较大图像中裁剪出一个矩形。但每次裁剪时,它都会获得正确的宽度和高度,但图像显示为黑色。

How to crop an image in vb.net?

*face 是一个预定义的矩形对象。

Dim OrignalImage = Image.FromFile("C:\fileName.jpg")

            Dim CropImage = New Bitmap(face.Width, face.Height)
            Using grp = Graphics.FromImage(OrignalImage)
                grp.DrawImage(OrignalImage, OrignalImage.Width, OrignalImage.Height, face, GraphicsUnit.Pixel)
                OrignalImage.Dispose()
                CropImage.Save("C:\newfile.jpg")
                grp.Dispose()
            End Using

【问题讨论】:

看起来您正在创建具有所需大小的 CropImage 对象,但从未告诉您的 DrawImage() 将图像应用到它。因此,当您保存 CropImage 时,它只是空白。 【参考方案1】:

您正在从OriginalImage 创建您的Graphics 对象。您需要从您的 CropImage 创建它。

此外,您无需调用 grp.Dispose(),因为 Using 块会为您完成此操作。

更正的代码:

Using OrignalImage = Image.FromFile("C:\fileName.jpg")
Using CropImage = New Bitmap(face.Width, face.Height)
    Using grp = Graphics.FromImage(CropImage)
        grp.DrawImage(
            OrignalImage, 0, 0,
            face, GraphicsUnit.Pixel)
    End Using
    CropImage.Save("C:\newfile.jpg")
End Using
End Using

【讨论】:

您对DrawImage 的使用也可能不正确,但如果没有更多信息,我无法判断。你想做什么?您有一个大图像 (fileName.jpg) 和该图像中的一个矩形 (face),并且您正在尝试创建一个包含源图像指定部分的新裁剪图像 (newfile.jpg)?如果这是你想要的,试试我编辑的代码。 谢谢!最后一个问题,如果我想稍微扩大矩形的面积,我会在哪里进行调整?给face.widthface.height? 要在脸部周围放置填充物?是的,这听起来很合理。 我实际上只是尝试过,它只是添加了空白,也许我需要将它添加到面部对象,因为它在grp.drawimage中使用?

以上是关于从较大的图像中裁剪出一个矩形的主要内容,如果未能解决你的问题,请参考以下文章

从图像中裁剪 System.Windows.Shapes 矩形

在matlab中裁剪图像

如何在 OpenCV c++ 中从图像中裁剪特定的矩形部分(ROI)

裁剪区域不是矩形时裁剪图像

如何在 iOS 中裁剪非矩形区域

使用矩形尺寸裁剪图像