【发布时间】:2009-03-24 10:29:27
【问题描述】:
我正在开发一个可以显示来自相机的实时图像的 C# 应用程序。 我在使用以下代码 sn-p 时面临的问题是,当在线程中连续执行此函数时,我在 Marshal.Copy 中得到 AccessViolationException。但是,这在运行一次时会成功运行(我得到一个静态图像)。我想这与一些内存损坏问题有关。有关如何处理此问题的任何想法/建议?
private Image ByteArrayToImage(byte[] myByteArray)
{
if (myByteArray != null)
{
MemoryStream ms = new MemoryStream(myByteArray);
int Height = 504;
int Width = 664;
Bitmap bmp = new Bitmap(Width, Height, PixelFormat.Format24bppRgb);
BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.WriteOnly, bmp.PixelFormat);
Marshal.Copy(myByteArray, 0, bmpData.Scan0, myByteArray.Length);
bmp.UnlockBits(bmpData);
return bmp;
}
return null;
}
【问题讨论】:
-
不确定,但您能否尝试在“LockBits”和“UnlockBits”周围加锁。由于此语句将位图锁定在系统内存上。你的异常告诉了对受保护内存的无效访问。
标签: c# bitmap access-violation