在Outlook插件中发生GDI通用错误

3
我们的产品是 Microsoft Office 的一个插件,其中包括一些图形界面。
我们使用 Graphics.DrawImage 来绘制图片。
问题在于,有一个特定的用户报告说 GUI 在 Microsoft Outlook 中无法显示,但在 Microsoft Word 中却可以正常工作。
我在日志中看到的错误信息是:
System.Runtime.InteropServices.ExternalException: A generic error occurred in GDI+.
    at System.Drawing.Graphics.CheckErrorStatus(Int32 status)
    at System.Drawing.Graphics.DrawImage(Image image, Int32 x, Int32 y, Int32 width, Int32 height)

我知道这可能意味着某种有限资源的问题,但事实是同样的GUI在Microsoft Word中运行得非常好。此外,我们尝试绘制的图像是一个16x16的小图标。
是否有某些特定进程的限制可能会导致这种情况?
更新:该问题与未能从文件流正确加载的特定图像有关。

1
你是从内存流还是磁盘中加载图像的呢? - user1693593
我正在使用MemoryStream,它可以来自WebRespone或嵌入式资源。 - ShaLi Shaltiel
1个回答

1

在使用MemoryStream时,重要的是在图像被处理并释放之前,流保持活动状态。这是因为图像有时需要从内存区域读取,该内存区域由内存流表示。

如果在图像被处理并释放之前关闭了流,则内存区域可能会变得无效或有效。

当您释放图像时,流也将被关闭。


谢谢您的回答,但这绝对不是问题所在...我有完全相同的代码在“微软Word”进程中运行,并且完美地工作。 - ShaLi Shaltiel
请注意,*"内存区域可能会变得无效"*。这可能是非常随机的体验,在一个地方它可以工作,在另一个地方则取决于流所占用的内存区域发生了什么。我建议您在代码中检查流是否在图像的生命周期内保持活动状态。 - user1693593

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接