In GDI +, JPEG Image to MemoryStream ist ein allgemeiner Fehler aufgetreten

Dies scheint ein berüchtigter Fehler im ganzen Web zu sein. So sehr, dass ich keine Antwort auf mein Problem finden konnte, da mein Szenario nicht passt. Eine Ausnahme wird ausgelöst, wenn ich das Bild im Stream speichere.

Seltsamerweise funktioniert dies perfekt mit einem PNG, gibt aber den obigen Fehler mit JPG und GIF, was ziemlich verwirrend ist.

Die meisten ähnlichen Probleme betreffen das Speichern von Bildern in Dateien ohne Berechtigungen. Ironischerweise besteht die Lösung darin, einen Speicherstrom zu verwenden, wie ich es tue ....

<code>public static byte[] ConvertImageToByteArray(Image imageToConvert)
{
    using (var ms = new MemoryStream())
    {
        ImageFormat format;
        switch (imageToConvert.MimeType())
        {
            case "image/png":
                format = ImageFormat.Png;
                break;
            case "image/gif":
                format = ImageFormat.Gif;
                break;
            default:
                format = ImageFormat.Jpeg;
                break;
        }

        imageToConvert.Save(ms, format);
        return ms.ToArray();
    }
}
</code>

Weitere Einzelheiten zur Ausnahme. Der Grund, warum dies so viele Probleme verursacht, ist die fehlende Erklärung :(

<code>System.Runtime.InteropServices.ExternalException was unhandled by user code
Message="A generic error occurred in GDI+."
Source="System.Drawing"
ErrorCode=-2147467259
StackTrace:
   at System.Drawing.Image.Save(Stream stream, ImageCodecInfo encoder, EncoderParameters    encoderParams)
   at System.Drawing.Image.Save(Stream stream, ImageFormat format)
   at Caldoo.Infrastructure.PhotoEditor.ConvertImageToByteArray(Image imageToConvert) in C:\Users\Ian\SVN\Caldoo\Caldoo.Coordinator\PhotoEditor.cs:line 139
   at Caldoo.Web.Controllers.PictureController.Croppable() in C:\Users\Ian\SVN\Caldoo\Caldoo.Web\Controllers\PictureController.cs:line 132
   at lambda_method(ExecutionScope , ControllerBase , Object[] )
   at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
   at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
   at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClassa.<InvokeActionMethodWithFilters>b__7()
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)
 InnerException: 
</code>

OK Dinge, die ich bisher ausprobiert habe.

Klonen Sie das Image und arbeiten Sie daran.Abrufen des Encoders für dieses MIME, der die Einstellung für die JPEG-Qualität enthält.

Antworten auf die Frage(21)

Ihre Antwort auf die Frage