Как решить эту ошибку - " попытка чтения или записи защищенной памяти. Это часто указывает на то, что другая память повреждена."
Я пытаюсь применить фильтр "нерезкая Маска" к изображению. Я использую C#.Net (FrameWork 4.0) и VS 2012. Я попробовал этот код, я также получаю выходное изображение, но только в течение 1-2 секунд, после чего эта ошибка приходит. Я все проверил, но не удалось решить.может кто-нибудь помочь мне выбраться отсюда.
Заранее спасибо.
Что я уже пробовал:
public void unsharp() { Oimg = (Bitmap)file.Clone();//input image for (int x = 0; x < Oimg.Width; x++) { for (int y = 0; y < Oimg.Height; y++) { Color pixel = Oimg.GetPixel(x, y); int r = pixel.R; int g = pixel.G; int b = pixel.B; int[] Oarray = new int[] { r, g, b };//input image array int[] Rarray = new int[Oarray.Length];//resultant image array newBitmap = (Bitmap)pictureBox1.Image;//filter applied image for (int m = 0; m < newBitmap.Width; m++) { for (int n = 0; n < newBitmap.Height; n++) { Color p = newBitmap.GetPixel(m, n);//Attempted to read or write protected memory. This is often an indication that other memory is corrupt. int r1 = p.R; int g1 = p.G; int b1 = p.B; int[] newarray = new int[] { r1, g1, b1 };//filter applied image array for (int e = 0; e <= Oarray.Length - 1; e++) Rarray[e] = Oarray[e] - newarray[e]; //convert array to bitmap Bitmap Rbmp = new Bitmap(pictureBox1.Width, pictureBox1.Height); int stride = pictureBox1.Width * 4; unsafe { fixed (int* intPtr = &Rarray[Oarray.Length-1]) { Rbmp = new Bitmap(pictureBox1.Width, pictureBox1.Height, stride, PixelFormat.Format32bppRgb, new IntPtr(intPtr)); } } newBitmap = (Bitmap)Rbmp.Clone(); pictureBox1.Image = newBitmap; } } } } }
Richard Deeming
Возможно, вы захотите рассмотреть возможность использования Библиотека изображений .NET[^], который уже реализует множество фильтров изображений.
Например: Фильтр маски нерезкости C# [^]
Лицензируется под MIT, а некоторые части кода покрываются CPOL или Apache 2.0:
https://github.com/fschultz/NetImageLibrary/blob/master/License.txt[^]