Dies scheint ein berüchtigter Fehler im gesamten 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.
Das ähnlichste Problem besteht darin, Bilder in Dateien ohne Berechtigungen zu speichern. Ironischerweise besteht die Lösung darin, einen Speicherstrom zu verwenden, wie ich es tue ...
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();
}
}
Weitere Details zur Ausnahme. Der Grund, warum dies so viele Probleme verursacht, ist die fehlende Erklärung :(
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:
OK Dinge, die ich bisher versucht habe.
- Klonen Sie das Bild und arbeiten Sie daran.
- Abrufen des Encoders für dieses MIME, der diesen mit der JPEG-Qualitätseinstellung übergibt.