0

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+で一般的なエラーが発生しました。

説明:現在のWebリクエストの実行中に未処理の例外が発生しました。エラーとエラーがコードのどこで発生したかについての詳細は、スタックトレースを確認してください。

例外の詳細:System.Runtime.InteropServices.ExternalException:GDI+で一般的なエラーが発生しました。

誰かアイデアはありますか?前もって感謝します

4

1 に答える 1

0

それで、私はこの質問への答え、またはこの質問への答えの少なくとも1つを見つけました。

RickStrahlsのブログエントリに感謝します。ビットマップのクローン作成手法は正しい方向への一歩でしたが(なぜMicrosoftなのか)、ashxからPNGを出力しようとするときは、特別な考慮が必要です。

この考慮事項は、基本的に、実際の場所に保存する前に、ビットマップをMemoryStreamに保存することです。

于 2012-07-07T13:44:14.723 に答える