剪切图像

本文关键字:图像 | 更新日期: 2023-09-27 18:33:18

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

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

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

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

谢谢!

剪切图像

如果要

调整图像大小,则需要一个新的图像对象,将调整后的图像放入该对象中。您缺少的是创建新的 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 语句中,因为它们通常不能很好地与垃圾回收配合使用。