c# - TextureBrush 内存不足异常

标签 c# gdi+

我正在尝试在另一张图片上放置水印。这是我的代码:

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/

相关文章:

c# - ASP .NET - 从选定的 Listview 控件行检索值?

javascript - 基于ViewBag显示Modal Error Message的PartialView

c# - 客户端终结点配置 '*' 未在 1 个终结点、WCF、Mono 中找到

c# - C# App 中显示游戏图形的最佳方向

c# - JPEG 编码器不适用于 GDI+ on mono (CentOS)

c# - 如何在 GDI+ 中对具有真实形状测量值(英寸)的旋转形状进行 HitTest ?

c# - 分离 ldap 连接字符串的最佳方法是什么?

c# - 简单地在 C# 中比较两个对象的属性

c++ - gdiplus成员不明确

c# - 多线程系统.Windows.图形