|
分類:[.NET 全般]
VB.net .net Framework 3.5.1 でWebサービスを作成しています。
指定した文字列からPNGファイルを作成するプログラムを作成したのですが、 普段動作していたものが急にエラーを出力するようになります。 一度エラーが発生するとIISのアプリケーションプールをリサイクルするまでは何度実行してもエラーとなります。
既存ファイルを編集して上書きする場合に同じエラーが発生する情報は見かけるのですが、 新規作成しているため違う原因だと考えています。
考えられる原因を教えて下さい。
<コード> Public Shared Function GetCharImage(ByVal txt As String, ByVal fontFileName As String, ByVal fontSize As Single, ByVal imageFormat As Imaging.ImageFormat) As String
Dim filePath As String = String.Empty ' カレントフォルダをAssemblyと同じ場所に変更 Dim uriPath = System.Reflection.Assembly.GetExecutingAssembly.CodeBase Dim uri = New System.Uri(uriPath) System.Environment.CurrentDirectory = IO.Path.GetDirectoryName(uri.LocalPath)
Dim pfc As New System.Drawing.Text.PrivateFontCollection() Dim fnt As Drawing.Font = Nothing Dim img As Drawing.Bitmap = Nothing Dim g As Drawing.Graphics = Nothing Dim b As Drawing.SolidBrush = Nothing
Try
' フォントファイルのフルパス Dim fontFilePath = IO.Path.GetFullPath(fontFileName) ' フォント追加 pfc.AddFontFile(fontFilePath) fnt = New Drawing.Font(pfc.Families(0), fontSize) ' ダミーの画像を作成 img = New Drawing.Bitmap(5000, 5000) g = Graphics.FromImage(img) b = New Drawing.SolidBrush(Color.Black) g.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
' 文字列のサイズを取得 Dim r = g.MeasureString(txt, fnt, img.Width) If img IsNot Nothing Then img.Dispose() img = Nothing End If ' 保存用画像の作成 img = New Drawing.Bitmap(CInt(r.Width), CInt(r.Height)) If g IsNot Nothing Then g.Dispose() g = Nothing End If
g = Graphics.FromImage(img)
' 文字を描画 g.DrawString(txt, fnt, b, 0S, 0S) filePath = String.Format("{0}.{1}", txt, imageFormat.ToString.ToLower) ' 画像を保存 img.Save(filePath, imageFormat) ' ←ここでエラーとなります
Catch ex As Exception
Throw
Finally
If b IsNot Nothing Then b.Dispose() b = Nothing End If If g IsNot Nothing Then g.Dispose() g = Nothing End If If img IsNot Nothing Then img.Dispose() img = Nothing End If If fnt IsNot Nothing Then fnt.Dispose() fnt = Nothing End If If pfc IsNot Nothing Then pfc.Dispose() pfc = Nothing End If
End Try
Return filePath
End Function <エラー> System.Runtime.InteropServices.ExternalException: GDI+ で汎用エラーが発生しました。 場所 System.Drawing.Image.Save(String filename, ImageCodecInfo encoder, EncoderParameters encoderParams) 場所 CharTest.CharCreator.GetCharImage(String txt, String fontFileName, Single fontSize, ImageFormat imageFormat)
|