使用DrawImage的代码在本地工作,但在Azure中使用ArgumentException失败

时间:2012-09-19 22:05:44

标签: azure argumentexception

我从我的源代码中提取了以下与此相关的代码:

using (Bitmap spriteBitmap = new Bitmap(Width, Height, PixelFormat.Format32bppArgb))
{
        using (Graphics spriteGraphics = Graphics.FromImage(spriteBitmap))
        {
                Rectangle imageRect = new Rectangle(0, 0, imageInfo.Width, imageInfo.Height);

                using (Bitmap clonedImageBitmap = imageInfo.ImageBitmap.Clone(imageRect, spriteBitmap.PixelFormat))
                {
                        clonedImageBitmap.SetResolution(spriteBitmap.HorizontalResolution, spriteBitmap.VerticalResolution);

                        spriteGraphics.DrawImage(
                                clonedImageBitmap,
                                mappedImageInfo.X, mappedImageInfo.Y,
                                imageRect,
                                GraphicsUnit.Pixel);

                                spriteGraphics.Flush(FlushIntention.Flush);
                }

                imageInfo.DisposeBitmap();
        }
}

此代码在本地与天蓝色的计算模拟器完美配合。但是,当我部署它并执行代码时,它不再起作用,并且在spriteGraphics.DrawImage中失败,其中包含着名的ArgumentException“参数无效”。

出于测试目的,我记录了clonedImageBitmap的详细信息,以查看是否存在不同之处。我发现的唯一不同于本地和云端的是.Flags - >本地我有77842和云77846所以似乎ImageFlagsHasTranslucent设置,但如果这导致云中的问题,这是如何可能是目前我所不知道的。

也许有人可以帮我解决这个奇怪的问题?

提前致谢。

HeManNew

1 个答案:

答案 0 :(得分:1)

我想说,由于应用程序的性质和运行的位置,确实很难解决问题。

这里的主要问题是您使用的类/ API来自System.Drawing命名空间,您必须知道此命名空间中的类是为与Windows窗体一起使用而设计的。它们不支持在Windows或ASP.NET服务中使用,这就是为什么只要您可以在Windows Azure Web角色或辅助角色中禁止使用这些API,这是最佳选择。云应用程序主要是在后台工作的Web应用程序或应用程序,这是避免类/ api依赖于System.Drawing的主要原因是进一步依赖GDI使情况更复杂的关键。

如果API失败,这就是它在Web环境中即使可用时也不兼容的原因。即使在Windows Azure文档中,也建议完全避免使用System.Drawing中的API / Class,如果必须在代码中使用,则应在您自己的Windows Azure应用程序中使用这些类时进行详尽的测试。 / p>