带有DrawImage的代码在本地工作,但在Azure中失败,出现异常

带有DrawImage的代码在本地工作,但在Azure中失败,出现异常,azure,argumentexception,Azure,Argumentexception,我从我的源代码中提取了与此相关的以下代码: using (Bitmap spriteBitmap = new Bitmap(Width, Height, PixelFormat.Format32bppArgb)) { using (Graphics spriteGraphics = Graphics.FromImage(spriteBitmap)) { Rectangle imageRect = new Rectangle(0, 0

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

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();
        }
}
这段代码在azure的计算仿真器本地运行得非常好。但当我部署它并执行代码时,它不再工作,并且在spriteGraphics.DrawImage中失败,出现著名的ArgumentException“参数无效”

出于测试目的,我记录了clonedImageBitmap的详细信息,以查看是否有不同之处。我在本地和云中发现的唯一不一样的东西是.Flags->locally,我有77842,在云中有77846,因此似乎设置了ImageFlagshaStranSluncent,但如果这导致云中出现问题,以及如何出现问题,目前我还不知道

也许有人能帮我解决这个奇怪的问题

提前谢谢


HeManNew

我想说的是,由于应用程序的性质和运行位置,工作起来确实很困难

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


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

感谢您的解释。不幸的是,我还不知道在Azure中使用System.Drawing是不可取的,但该功能(动态生成Css精灵)对于我的应用程序是必需的,所以我不能排除这一点。但令我感到奇怪的是,在本地开发中,计算机仿真器中的一切都运行良好。原因很简单,因为系统。绘图类依赖于GDI,GDI基于显示特定组件,即底层库和驱动程序。这就是您的计算机与Windows Azure计算机之间的关键区别。云计算机中特定于GDI的模块无法与use desktop的性能和功能相匹配,这就是为什么要谨慎使用这些API的原因