C# AccessViolationException错误

C# AccessViolationException错误,c#,access-violation,opencvsharp,C#,Access Violation,Opencvsharp,我想问你一个问题。当我尝试使用Marshal.ReadByte时,我得到一个错误,“尝试读取或写入受保护的内存。这通常表示其他内存已损坏。”我进行了搜索,但仍然无法解决此问题。你能帮我吗?这是我的密码 unsafe static void Main(string[] args) { IplImage I_input = Cv.LoadImage("1.6.tif", LoadMode.GrayScale); IntPtr ptr2 = I_input.ImageData;

我想问你一个问题。当我尝试使用Marshal.ReadByte时,我得到一个错误,“尝试读取或写入受保护的内存。这通常表示其他内存已损坏。”我进行了搜索,但仍然无法解决此问题。你能帮我吗?这是我的密码

unsafe static void Main(string[] args)
        {
 IplImage I_input = Cv.LoadImage("1.6.tif", LoadMode.GrayScale);

  IntPtr ptr2 = I_input.ImageData;

            for (int x = 0; x < I_input.Width; x++)
            {
                for (int y = 0; y < I_input.Height; y++)
                {
                    int offset = (I_input.WidthStep * y) + (x * 3);
                    byte b = Marshal.ReadByte(ptr2, offset + 0);    // B
                    byte g = Marshal.ReadByte(ptr2, offset + 1);    // G
                    byte r = Marshal.ReadByte(ptr2, offset + 2);    // R
                    Marshal.WriteByte(ptr2, offset, r);
                    Marshal.WriteByte(ptr2, offset, g);
                    Marshal.WriteByte(ptr2, offset, b);
                }
            }
}
不安全的静态void Main(字符串[]args)
{
IplImage I_输入=Cv.LoadImage(“1.6.tif”,LoadMode.GrayScale);
IntPtr ptr2=I_input.ImageData;
对于(int x=0;x
哪一行是错误?参数中的值是否合理?ptr2不是IntPtr.Zero吗?我得到这一行的错误;字节b=Marshal.ReadByte(ptr2,偏移量+0);好的,第一个ReadByte。现在,你能回答问题的相关部分吗?偏移量的值是多少,ptr2的值是多少?您对每像素3字节的假设是否正确?鉴于您正在强制执行
灰度
(注意:我从未使用过或知道您正在使用的库),
i\u input的
深度
值是多少?因为你加载的图像是灰度的,所以当你试图读取它时,我假设它不是RGB。您还忽略了
widthStep
值,这可能会使您陷入进一步的麻烦。。。