2017-08-04 4 views
1

ich möchte Bild mit dem gleichen Namen und Pfad nach einer Drehung speichern.ein allgemeiner Fehler aufgetreten gdi + C#

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; 

ich mein Bild von einem lokalen Pfad in Festplatte: ein Fehler in der Methode speichern (ein allgemeiner Fehler aufgetreten gdi +)

Hier ist der Code ich habe. für die ich benutze einen Ashx Handler so mein imageUrl ist so etwas wie

Hier ist der Code von Handler.ashx "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); 
} 

Wenn ich entfernen Diese Zeile

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

Mein Code wird gut, aber der Browser ist nicht in der Lage, mein Bild neu zu laden.

und wenn ich lasse es funktioniert mein Code gut, aber der Fehler wird generiert, nachdem 3 oder mehr Ausführungsaufrufe auf dem gleichen Bild.

Was sind Ihre Vorschläge?

Vielen Dank für Ihre Hilfe.

+0

Welche Version von DevExpress verwenden Sie? Es ist möglich, dass dieses Problem nicht von unserer Seite repropeziert wird. Könnten Sie eine kleine Beispiel-App zur Verfügung stellen, um das Verhalten zu reproduzieren ?. Es wird leicht zu erkennen sein, dass sich das Problem in Ihrer Anwendung oder in den Kontrollen befindet. DevExpress-Unterstützung ist der beste Ort, um eine Frage zu stellen, die eher wie Steuerfehler als Anwendungsfehler aussieht. –

+0

Hallo, Vielen Dank für Ihre Antwort, Das Problem ist nicht in DevExpress Kontrolle, auch wenn ich von einer anderen Kontrolle asp geändert habe ich noch habe den gleichen Fehler. Der Fehler wird nur generiert, wenn ich ** DateTime.Now.Second ** in meine Bild-URL und erst nach 3 oder mehr Ausführungsaufrufen für dasselbe Bild hinzufüge. Wenn ich den ** DateTime.Now.Second ** -Browser entferne, kann ich mein Bild nicht mehr laden, da das URL-Bild nicht geändert wurde. Könnten Sie mir bitte eine andere Lösung nennen, um das Bild um 90 ° zu drehen und es in meinem Pfad zu speichern und es entweder in JS (Client-Seite) oder (Server-Seite) neu zu laden? –

+0

Erstellen Sie einen AJAX-Aufruf, der das Bild im Format base64 string zurückgibt, nachdem Sie den Rotationsvorgang an Ihrem gespeicherten Bild ausgeführt haben. –

Antwort

0

Endlich fand ich den Fehler.

ich die Datei schließen sollte, sobald ich das Bild in context.Response.outputStream gespeichert haben "Handler.ashx"

für das i hinzugefügt image.Dispose()

Hier ist die neue Handler.ashx-Code:

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

Eine bessere Vorgehensweise besteht darin, die gesamte Bildverarbeitung in einen 'using'-Block zu schreiben. – Nyerguds

Verwandte Themen