2017-08-04 12 views
1

私は回転後に同じ名前とパスで画像を保存したいと思います。 iは、Methodeの中にエラーが保存持っ一般的なエラーが発生しましたgdi + c#

はここのコードです(一般的なエラーは、GDI +発生):

string path = @"mypath"; 
Bitmap image = new Bitmap(path + aspximage.ImageUrl, true); 
image.RotateFlip(System.Drawing.RotateFlipType.Rotate90FlipNone); 
//The error is generated here 
image.Save(path + aspximage.ImageUrl, ImageFormat.Png); 
// I have added this line so that the browser can display it 
aspximage.ImageUrl = aspximage.ImageUrl + "&t=" + DateTime.Now.Second; 

iは、ハードドライブ内のローカルパスからの私のイメージを取得します。 "?Handler.ashx N = nameimage.png":

public void ProcessRequest (HttpContext context) { 

    string imgName = context.Request.QueryString["n"]; 
    context.Response.ContentType = "image/png"; 
    string path = @"myPath" + imgName; 
    Image image = Image.FromFile(path); 
    image.Save(context.Response.OutputStream, ImageFormat.Png); 
} 

私が削除した場合、そのために私は私のIMAGEURLがのようなものがある。ここ

Handler.ashxのコードだASHXハンドラを使用しますこの行

// I have added this line so that the browser can display it 
aspximage.ImageUrl = aspximage.ImageUrl + "&t=" + DateTime.Now.Second; 

私のコードはうまくいきますが、ブラウザは画像をリロードできません。

私のコードは正常に動作しますが、エラーが発生しました。3回以上実行すると、同じ画像にが呼び出されます。

あなたの提案は何ですか?

ありがとうございました。

+0

どのDevExpressのバージョンを使用していますか?この問題が私たちの側で再現されない可能性があります。あなたは行動を再現するための小さなサンプルアプリを提供できますか?その問題がアプリケーションまたはコントロール内にあるかどうかを簡単に識別できます。 DevExpressサポートは、アプリケーションエラーではなく制御エラーのような質問をするのに最適な場所です。 –

+0

こんにちは、私は別のコントロールによって変更された場合でも、問題はDevExpressコントロールではありません。同じエラーがあります。 エラーは、画像URLに** DateTime.Now.Second **を追加した場合、および同じ画像に対して3回以上実行した後にのみ追加されます。 ** DateTime.Now.Second **ブラウザを削除すると、イメージが変更されていないため、イメージを再読み込みできなくなります。 イメージを90°回転させて自分のパスに保存し、JS(クライアント側)または(サーバー側)のどちらかに再ロードする別の解決策を教えてください。 –

+0

保存した画像を回転操作した後、base64文字列の形式で画像を返すajax呼び出しを行います。 –

答えて

0

最後にエラーが見つかりました。そのため

私はcontext.Response.outputStreamで画像を保存した後、私はファイルを閉じてください "をHandler.ashx"

私は(image.Disposeを追加しました)

ここに新しいですHandler.ashxのコード:

public void ProcessRequest (HttpContext context) { 

    string imgName = context.Request.QueryString["n"]; 
    context.Response.ContentType = "image/png"; 
    string path = @"mypath" + imgName; 
    Image image = Image.FromFile(path); 
    image.Save(context.Response.OutputStream, ImageFormat.Jpeg); 
    //I added this line 
    image.Dispose(); 
} 
+0

もっと良い方法は、画像処理全体を 'using'ブロックで囲むことです。 – Nyerguds

関連する問題