我正在用WPF C#编写一个成像应用程序。它使用不安全的代码逐个像素地读取图像文件。
我得到的问题是在写入像素值时抛出错误Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
。它适用于某些图像,而对于其他图像则显示错误。以下是代码:
unsafe
{
byte* pbuff = (byte*)buff.ToPointer();
for (int i = 0; i < size; i=i+stride)
{
pbuff[i] = (byte)cr[j].NewColor.Blue;
pbuff[i + 1] = (byte)cr[j].NewColor.Green; // here it shows error
pbuff[i + 2] = (byte)cr[j].NewColor.Red;
}
}
修改
读取像素效果很好。
B = (double)pbuff[i];
G = (double)pbuff[i + 1];
R = (double)pbuff[i + 2];
在读取时没有显示任何错误,但对于相同的索引(已读取),它在尝试写入时显示错误。
答案 0 :(得分:2)
基本上这意味着您正在尝试写入为pbuff引用的对象分配的内存之外的内存。
所以这与安全代码中的数组索引超出范围基本相同。
答案 1 :(得分:1)
如果您使用的是WPF,则不应使用不安全的代码,而应使用WPF。这就是我认为的WriteableBitmap Class。