2012-03-07 16 views
3

親愛なる専門家を節約しながら、私はコードが良い作業が、私はImageFormatにそれを変更したときにされImage.format.jpegを使用する場合gdi +で一般的なエラーが発生しました。画像を保存しながら、私はエラーを取得しています画像

ClsImageManager objImgManager = new ClsImageManager(); 
    Bitmap ImageBitmap = objImgManager.GetBitmapFromBytes(ImageData); 
    Response.ContentType = "image/tiff"; 
    ImageBitmap.Save(Response.OutputStream, ImageFormat.Tiff); 
    ImageBitmap.Dispose(); 
    Response.End(); 

を次のようにコードがあります。 Tiffを実行すると、エラーが発生するgdi +で一般的なエラーが発生しました。

+0

この問題を追跡するのに費やした時間は、実際のメッセージが表示されていないことが判明しました。私のサーバーはアップロードに関連するディスク容量の割当量を持っていたため、画像を保存できなかったため、gdi +例外が発生しました。 –

答えて

4

あなたがGDI/GDI +(System.Drawing名前空間)が正式にASP.NETでサポートされていないことに注意してください - http://msdn.microsoft.com/en-us/library/system.drawing.aspxの「注意」を参照してください。
WICが代わりに使用されることを想定しているGDI +(http://weblogs.asp.net/bleroy/archive/2009/12/10/resizing-images-from-the-server-using-wpf-wic-instead-of-gdi.aspxを参照)

は、多くが正常にASP.NETでGDI +を使用していた、と述べました。おそらく、イメージをメモリストリーム(またはファイル)に保存してから、保存したイメージをレスポンスに書き込む必要があります。詳細については、次のリンクを参照してください。http://www.west-wind.com/weblog/posts/2006/Oct/19/Common-Problems-with-rendering-Bitmaps-into-ASPNET-OutputStream

もう1つの回避策は、ユーザーアカウントに関連付けることができます。どうやら、GDI/GDI +はデバイスコンテキスト(スクリーン、プリンタなど)にバインドされており、サービスアカウントでは利用できない可能性があります。したがって、通常のユーザーアカウントでASP.NETコードを実行してみてください。

2

イメージセーブを明示的にエンコードする必要があります。
Image.SaveのこのMSDNドキュメントの末尾にあるコード例をご覧ください。
Image.Save Method (String, ImageCodecInfo, EncoderParameters)
同じ処理を保存に適用できます。

しかし、objImgManagerがイメージを保存する前にバッファを破棄している可能性もあります。

Bitmap ImageBitmap = objImgManager.GetBitmapFromBytes(ImageData); 

あなたはこれを行うことによって、画像のコピーを作成することによってこの問題を回避することができます

Bitmap ImageBitmap = new Bitmap(objImgManager.GetBitmapFromBytes(ImageData)); 
+0

この回避策は、TIFFをJPGに変換する際のGDI +の一般的なエラーの問題を解決しました。ありがとうございました! – Tomino

関連する問題