2012-07-07 3 views
0

에 배포 ASHX I 푸른에서 호스팅 ASHX 파일을 구성하는 다음과 같은 코드가 있습니다 :GDI 때 푸른

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 +에서 일반 오류가 발생했습니다.

누구나 아이디어가 있으십니까? 미리 감사드립니다.

답변

0

그래서이 질문에 대한 답변 또는이 질문에 대한 답변 중 적어도 하나를 발견했습니다.

덕분에 Rick Strahls blog entry입니다. 비트 맵 복제 기술은 올바른 방향으로 나아가는 단계 였지만 (분명히 Microsoft?) 분명히 ashx에서 PNG를 출력하려고 할 때 특별히 고려해야합니다.

이 고려 사항은 기본적으로 Bitmap을 실제 위치에 저장하기 전에 MemoryStream에 저장합니다.