我有一些代码可以在几台机器上完美运行(开发,QA,UAT).不幸的是,在生产中我得到"GDI +中出现了一般错误" bmp.Save(ms, ImageFormat.Png);因此,我假设你无法重现问题,但也许有人可以发现我的错误.
一些注释,我已经搜索了很多常见的解决方案,请注意这是保存到一个MemoryStream所以大多数人建议不适用的文件权限问题,"bmp在打开时锁定"解决方案也是如此,因为我,'我在别的地方写作.最后,这不是因为png需要可搜索的流,因为它MemoryStream是可搜索的.
请注意,如果我将其更改为ImageFormat.Jpeg工作正常.我只对PNG有问题.我发现HKEY_CLASSES_ROOT\CLSID\{FAE3D380-FEA4-4623-8C75-C6B61110B681}由于权限,提到注册表项可能是问题所在.因此,我设置密钥以允许Everyone对此密钥具有读取访问权限,无需更改.
public static MemoryStream GenerateImage(string text)
{
MemoryStream ms = new MemoryStream();
using (Bitmap bmp = new Bitmap(400,400))
{
bmp.Save(ms, ImageFormat.Png);
ms.Position = 0;
}
return ms;
}
Run Code Online (Sandbox Code Playgroud)
这是完整的堆栈跟踪:
[ExternalException(0x80004005):GDI +中发生一般错误.]
System.Drawing.Image.Save(Stream stream,ImageCodecInfo encoder,EncoderParameters encoderParams)+616457
WP.Tools.Img.GenerateImage(String text)+383
注意:我的问题已经列举了拟议副本中的解决方案.没有问题.如果它们也会因JPEG而失败.