剪切图像

时间:2012-05-07 00:21:50

标签: c# image image-processing clip

我有以下代码来处理流中的图像。我的目的是选择一个子区域并将其调整为100x100。我事先并不知道图像的格式。

var image = new Bitmap(stream);

var destArea = new Rectangle(0, 0, 100, 100);
var srcArea = new Rectangle(x, y, width, height);

var gfx = Graphics.FromImage(image);
gfx.DrawImage(image, destArea, srcArea, GraphicsUnit.Pixel);

var ms = new MemoryStream();
image.Save(ms, image.RawFormat);

出于某种原因,这是我想要的子区域,调整大小并将其放在原始图像的顶部,这样结果就是原始图像和我想要的结果的混合。

我已经通过几个指南,关于图像处理的帖子,但我仍然不确定我在哪里错了。你介意帮帮我吗?

另外,如果你还向我解释我缺少什么(代码背后的一点理论),我真的很感激。

谢谢!

1 个答案:

答案 0 :(得分:1)

如果要调整图像大小,则需要一个新的图像对象,您可以将调整后的图像放入其中。您缺少的是创建新的100x100图像。以下是代码的外观:

var image = new Bitmap(stream);
var destArea = new Rectangle(0, 0, 100, 100);
var srcArea = new Rectangle(x, y, width, height);

// Destination image
var destImage = new Bitmap(destArea.Width, destArea.Height);

var gfx = Graphics.FromImage(destImage);
gfx.DrawImage(image, destArea, srcArea, GraphicsUnit.Pixel);

var ms = new MemoryStream();
destImage.Save(ms, image.RawFormat);

我还建议在using语句中包装所有GDI +对象,因为它们通常不能很好地处理垃圾回收。