Dieser Fehler scheint im ganzen Web berüchtigt zu sein. So sehr, dass ich nicht in der Lage gewesen, eine Antwort auf mein Problem zu finden, da mein Szenario nicht passt. Eine Ausnahme wird ausgelöst, wenn ich das Bild in den Stream speichern.
Seltsamerweise funktioniert dies perfekt mit einem png, aber gibt den oben genannten Fehler mit jpg und gif, die ziemlich verwirrend ist.
Die meisten ähnlichen Probleme beziehen sich auf das Speichern von Bildern in Dateien ohne Berechtigungen. Ironischerweise ist die Lösung, 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();
}
}
Mehr Details zur Ausnahme. Der Grund, warum dies so viele Probleme verursacht, ist das Fehlen einer 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 ausprobiert habe.
- Klonen Sie das Bild und arbeiten Sie daran.
- Abrufen des Kodierers für diese MIME-Datei, die mit der Qualitätseinstellung jpeg übergeben wird.