Ich erstelle in einer WebApplication Zeichnungen (testweise nur Formen; kreise, Rechteke und so).
Dies ist mein Code
Bitmap bmp1 = new Bitmap(500, 500, PixelFormat.Format24bppRgb);
Graphics g1 = Graphics.FromImage(bmp1);
Brush pinsel = new SolidBrush(Color.Blue);
Pen stift = new Pen(pinsel, 10);
Rectangle viereck = new Rectangle();
viereck.Width = 400;
viereck.Height = 400;
viereck.X = 50;
viereck.Y = 50;
g1.DrawEllipse(stift, viereck);
bmp1.Save(Response.OutputStream, ImageFormat.Jpeg);
g1.Dispose();
bmp1.Dispose();
Response.End();
Beim debugging ruft 4. letzte Zeile eine NotSupportedException auf:> Fehlermeldung:
In System.NotSupportedException ist eine Ausnahme vom Typ "System.Web.dll" aufgetreten, die nicht vor einer verwalteten/systemeigenen Grenze behandelt wurde
Zusätzliche Informationen: Die angegebene Methode wird nicht unterstützt.
Wenn ich auf "weiter" klicke läuft der Code aber problemlos weiter.
Kann mir wer erklären, woran es liegt, das die entsprechende Methode nicht unterstützt wird?
Hallo,
eventuell hilft dir folgendes weiter: C# - Outputting image to response output stream giving GDI+ error
Wissen ist nicht alles. Man muss es auch anwenden können.
PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |
Hallo,
das Graphics
-Objekt solltest Du disposen, bevor Du das Bild in den Stream schreibst.
Vermutlich löst das schon das Problem.
Besser wäre es noch, für Bitmap
und Graphics
einen using
-Block zu verwenden.
Gruß, MarsStein
EDIT: für PNG-Bilder muss man den Umweg über MemoryStream gehen, wie im Link von inflames2k beschrieben.
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
Aaaaalso:
Ich habe den code nun so geändert, das "g.Dispose();" vor "bmp1.save(...)" aufgerufen wird. Ändern tut das aber nichts. Die Exception wird nach wie vor geworfen.
Was den Link von inflames2k betrifft, so weiss ich nicht, wie mir das helfen soll, denn:
Mit using-Blöcken für Bitmap und Graphics (und entsprechend ohne dispose()-Methoden)
using (Bitmap bmp1 = new Bitmap(500, 500, PixelFormat.Format24bppRgb))
{
using (Graphics g1 = Graphics.FromImage(bmp1))
{
Brush pinsel = new SolidBrush(Color.Blue);
Pen stift = new Pen(pinsel, 10);
Rectangle viereck = new Rectangle();
viereck.Width = 400;
viereck.Height = 400;
viereck.X = 50;
viereck.Y = 50;
g1.DrawEllipse(stift, viereck);
bmp1.Save(Response.OutputStream, ImageFormat.Jpeg);
}
}
Response.End();
ändert sich auch nichts. Die Exception wird immer noch geworfen.
(Ist 'bmp1.Save(...)' am richtigen Ort oder sollte ich die Methode ausserhalb von 'using (Graphics ...)' aufrufen? funktionieren tut beides und die Esxception wird auch in beiden Fällen geworfen)
Hast du denn trotzdem mal den Umweg über den Memory-Stream versucht oder es gleich ganz gelassen?
Aber ich glaube folgendes sollte dir besser weiter helfen:
Common Problems with rendering Bitmaps into ASP.NET OutputStream
Wissen ist nicht alles. Man muss es auch anwenden können.
PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |
Ok, mit MemoryStream funktioniert es ohne Exception (auch mit Jpeg statt Png). Daher Danke @inflames2k
Mich würde dennoch interessieren, was die Ursache der Exception genau war.
Ok, mit MemoryStream funktioniert es ohne Exception. Daher Danke @inflames2k
Mich würde dennoch interessieren, was die Ursache der Exception genau war.
Ich nehme mal an, dass folgender Satz es grob erklärt:
PNGs (and other formats) need to be saved to a seekable stream.
Entnommen aus dem ersten Link.
Wissen ist nicht alles. Man muss es auch anwenden können.
PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |