我正在尝试在另一张图片上放置水印。这是我的代码:
var imgPhoto = Image.FromFile(filePath);
var grPhoto = Graphics.FromImage(imgPhoto);
var point = new Point(imgPhoto.Width - imgWatermark.Width, imgPhoto.Height - imgWatermark.Height);
var brWatermark = new TextureBrush(imgWatermark, new Rectangle(point.X, point.Y, imgWatermark.Width, imgWatermark.Height));
grPhoto.FillRectangle(brWatermark, new Rectangle(point, imgWatermark.Size));
imgPhoto.Save(outputFolder + @"\" + filename);
但是出现了一个问题,TextureBrush 抛出内存不足异常。我四处搜寻,但找不到真正好的解决方案。据我所知,在 TextureBrush 尝试完成其工作之前没有任何处理。
最佳答案
此外,当从中加载 Image
的流已被释放时,也会发生这种情况。如果您计划创建纹理画笔,请尽量避免处理图像流。例如,这会起作用:
var bytes = File.ReadAllBytes("image.bmp");
System.Windows.Controls.Image image = null;
using (var stream = System.IO.MemoryStream(bytes))
{
image = System.Windows.Controls.Image.FromStream(stream);
var brush = new System.Drawing.TextureBrush(image); // No issues
}
但是如果错误地处理流,则做几乎相同的事情会产生该异常。
var bytes = File.ReadAllBytes("image.bmp");
System.Windows.Controls.Image image = null;
using (var stream = System.IO.MemoryStream(bytes))
{
image = System.Windows.Controls.Image.FromStream(stream);
}
var brush = new System.Drawing.TextureBrush(image); // Exception Thrown!
关于c# - TextureBrush 内存不足异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11098263/