1

我有以下代码可以处理来自流的图像。我的意图是选择它的一个子区域并将其调整为 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);

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

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

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

谢谢!

4

1 回答 1

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);

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

于 2012-05-07T02:11:31.213 回答