ASHX部署到Azure时出现GDI +错误

时间:2012-07-07 01:37:48

标签: c# .net azure drawing

我有以下代码组成Azure上托管的ASHX文件:

public void ProcessRequest(HttpContext context)
        {
            int number;
            try
            {
                number = int.Parse(context.Request.QueryString["number"]);
            }
            catch
            {
                number = -1;
            }

            var bitmap = new Bitmap(173, 173);
            DrawImage(bitmap, number);
            context.Response.ContentType = "image/png";
            bitmap.Save(context.Response.OutputStream, ImageFormat.Png);
            context.Response.Flush();
        }

        private void DrawImage(Bitmap bitmap, int number)
        {
            using (var graphics = Graphics.FromImage(bitmap))
            {
                graphics.FillRectangle(GetBrush(number), 0, 0, 173, 173);

                Font font = new Font("Segoe UI", 40f, FontStyle.Bold);
                StringFormat textFormat = new StringFormat
                                              {
                                                  Alignment = StringAlignment.Far,
                                                  LineAlignment = StringAlignment.Center
                                              };
                Rectangle rectangle = new Rectangle(0, 0, 160, 173);
                graphics.DrawString("76", font, Brushes.Black, rectangle, textFormat);

                font = new Font("Arial", 16, FontStyle.Bold);
                textFormat = new StringFormat
                                 {
                                     Alignment = StringAlignment.Near,
                                     LineAlignment = StringAlignment.Near
                                 };
                rectangle = new Rectangle(10, 10, 163, 163);
                graphics.DrawString("YOUR NUMBER", font, Brushes.Black, rectangle, textFormat);
            }
        }

在本地运行时,此代码可以完美运行并生成正确的结果。部署到Azure时,我得到以下内容:

  

GDI +中发生了一般性错误。

     

描述:执行期间发生了未处理的异常   当前的网络请求。请查看堆栈跟踪了解更多信息   有关错误的信息以及它在代码中的起源。

     

异常详细信息:System.Runtime.InteropServices.ExternalException:A   GDI +中发生了一般性错误。

有人有什么想法吗?提前致谢

1 个答案:

答案 0 :(得分:0)

所以,我找到了这个问题的答案,或者至少是这个问题的一个答案。

感谢Rick Strahls blog entry。虽然Bitmap克隆技术朝着正确的方向迈出了一步(为什么是Microsoft?),但显然当你试图从ashx输出PNG时,你必须特别考虑。

这种考虑基本上是将Bitmap保存到MemoryStream之前将其保存到实际位置。

相关问题