Un générique erreur s'est produite dans GDI+, Image JPEG à MemoryStream

Ce qui semble être un peu une erreur infâme sur le web. Tant et si bien que j'ai été incapable de trouver une réponse à mon problème que mon scénario n'est pas adaptée. Une exception est lancée lorsque j'enregistre l'image dans le flux.

Bizarrement cela fonctionne parfaitement avec un png mais donne l'erreur ci-dessus avec jpg et gif qui est plutôt déroutant.

Plus similaires problème là se rapportent à l'enregistrement des images dans des fichiers sans autorisations. Ironiquement, la solution est d'utiliser un flux de mémoire que je suis en train de faire....

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();
    }
}

Plus en détail à l'exception. La raison de ce qui provoque beaucoup de problèmes est le manque d'explication 🙁

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 choses que j'ai essayé jusqu'à présent.

  1. Le clonage de l'image et de travailler sur cela.
  2. De la récupération de l'encodeur pour que MIME passage qu'avec le format jpeg, le réglage de la qualité.
connexes: stackoverflow.com/questions/4671449/...
stackoverflow.com/questions/1053052/...
Pour moi, le problème était que le dossier n'existe pas. Résolu en créant le dossier.
Pour moi, c'était un indice en dehors de la plage d'obtenir d'ingestion.

OriginalL'auteur madcapnmckay | 2009-06-27