Ini tampaknya sedikit kesalahan terkenal di seluruh web. Sedemikian rupa sehingga saya tidak dapat menemukan jawaban untuk masalah saya karena skenario saya tidak cocok. Pengecualian terlempar ketika saya menyimpan gambar ke aliran.
Anehnya ini bekerja dengan baik dengan png tetapi memberikan kesalahan di atas dengan jpg dan gif yang agak membingungkan.
Sebagian besar masalah serupa di luar sana berhubungan dengan menyimpan gambar ke file tanpa izin. Ironisnya solusinya adalah menggunakan aliran memori seperti yang saya lakukan ....
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();
}
}
Lebih detail untuk pengecualian. Alasan ini menyebabkan begitu banyak masalah adalah kurangnya penjelasan :(
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 hal yang sudah saya coba sejauh ini.
- Mengkloning gambar dan mengerjakannya.
- Mengambil encoder untuk MIME yang melewatinya dengan pengaturan kualitas jpeg.