2

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

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 -> 在本地我有 77842 和在云中 77846 所以看起来 ImageFlagsHasTranslucent 已设置,但如果这会导致云中的问题以及如何可以是我目前不知道的。

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

提前致谢。

赫曼新

4

1 回答 1

1

我会说,由于应用程序的性质和运行的位置,工作肯定是一个难题。

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

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

于 2012-09-19T23:11:19.897 回答