Я имею дело со сбоями программы после добавления новой функции в приложение обработки изображений C # с помощью AForge.Новая функция загружает изображение маски из файловой системы и преобразует замаскированную область в белый фон.Когда функция MaskedFilter запущена, она будет нормально работать для 5–15 изображений, а затем выдает ошибку защищенной памяти и аварийное завершение работы.
Вот код для функции маски:
private void SlabMask(object sender, EventArgs e)
{
Bitmap Mask = (Bitmap)System.Drawing.Image.FromFile(Path.Combine(pictures, "Mask.jpg"));
int[,] kernel =
{
{ 0, 0, 0 },
{ 0, 0, 0 },
{ 0, 0, 0 }
};
Convolution conv = new Convolution(kernel);
Invert inv = new Invert();
Bitmap myImage = (Bitmap)Editor.Image;
ResizeBilinear makefit = new ResizeBilinear(myImage.Width, myImage.Height);
Bitmap fitmask = makefit.Apply(Mask);
MaskedFilter chopBackground = new MaskedFilter(conv, fitmask);
Bitmap blackBackground = chopBackground.Apply(myImage);
MaskedFilter makeWhite = new MaskedFilter(inv, fitmask);
Bitmap whiteBackground = makeWhite.Apply(blackBackground);
string processedpath = Path.Combine(pictures, baseprocessedpath);
string newbaseFilename = Path.Combine(processedpath, "comic.jpg");
string myFilename = newbaseFilename.Insert(newbaseFilename.Length - 4, number.ToString());
System.Drawing.Imaging.ImageCodecInfo[] codecs = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders();
System.Drawing.Imaging.ImageCodecInfo ici = null;
foreach (System.Drawing.Imaging.ImageCodecInfo codec in codecs)
{
if (codec.MimeType == "image/jpeg")
ici = codec;
}
System.Drawing.Imaging.EncoderParameters ep = new System.Drawing.Imaging.EncoderParameters();
ep.Param[0] = new System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)84);
Editor.Image = whiteBackground;
whiteBackground.Save(myFilename, ici, ep);
}
А вот трассировка стека при возникновении ошибки:
An unhandled exception of type 'System.AccessViolationException' occurred in AForge.Imaging.dll
Unhandled Exception: System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
at AForge.Imaging.Filters.MaskedFilter.ProcessImage(UnmanagedImage image, Rectangle rect, Byte* mask, Int32 maskLineSize)
at AForge.Imaging.Filters.MaskedFilter.ProcessFilter(UnmanagedImage image, Rectangle rect)
at AForge.Imaging.Filters.BaseInPlacePartialFilter.Apply(BitmapData imageData)
at AForge.Imaging.Filters.BaseInPlacePartialFilter.Apply(Bitmap image)
at VSE.Form1.SlabMask(Object sender, EventArgs e) in Z:\VSE\VSE 2.0\VSE\Form1.cs:line 459
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at VSE.Program.Main() in Z:\VSE\VSE 2.0\VSE\Program.cs:line 19
The program '[8272] VSE.exe' has exited with code 0 (0x0).
Я все утро бью головой об стену, пытаясь выяснить причину этой аварии.Кто-нибудь знает, как это исправить?Заранее спасибо!