Avi视频生成缩略图时,提示“尝试读取或写入受保护的内存。这通常指示其他内存已损坏”
2014-04-15 11:31
453 查看
需求:录制Avi格式视频成功后,使用DirectShow生成缩略图,由于视频录制时,宽高分辨率可调节,所以有些情况下,生成缩略图会抛出异常“尝试读取或写入受保护的内存。这通常指示其他内存已损坏”。
异常位于代码段:bmp = new Bitmap(width, height, stride, System.Drawing.Imaging.PixelFormat.Format24bppRgb, hImage);之后。只要对此bmp图像进行操作就会有异常抛出。
于是,查阅msdn关于bitmap类的介绍,如下:
用指定的大小、像素格式和像素数据初始化 Bitmap 类的新实例。
新 Bitmap 的宽度(以像素为单位)。
height
新 Bitmap 的高度(以像素为单位)。
stride
指定相邻扫描行开始处之间字节偏移量的整数。这通常(但不一定)是以像素格式表示的字节数(例如,2 表示每像素 16 位)乘以位图的宽度。传递给此参数的值必须为 4 的倍数。
format
新 Bitmap 的 PixelFormat 枚举。
scan0
指向包含像素数据的字节数组的指针。
根据说明Stride必须为4的倍数,于是限定设置的宽高必须为4的倍数,之后生成的avi在缩略图时不再异常,问题解决。
说明:如有更好方法欢迎指出。谢谢。
异常位于代码段:bmp = new Bitmap(width, height, stride, System.Drawing.Imaging.PixelFormat.Format24bppRgb, hImage);之后。只要对此bmp图像进行操作就会有异常抛出。
于是,查阅msdn关于bitmap类的介绍,如下:
用指定的大小、像素格式和像素数据初始化 Bitmap 类的新实例。
public Bitmap ( int width, int height, int stride, PixelFormat format, IntPtr scan0 )
参数
width新 Bitmap 的宽度(以像素为单位)。
height
新 Bitmap 的高度(以像素为单位)。
stride
指定相邻扫描行开始处之间字节偏移量的整数。这通常(但不一定)是以像素格式表示的字节数(例如,2 表示每像素 16 位)乘以位图的宽度。传递给此参数的值必须为 4 的倍数。
format
新 Bitmap 的 PixelFormat 枚举。
scan0
指向包含像素数据的字节数组的指针。
根据说明Stride必须为4的倍数,于是限定设置的宽高必须为4的倍数,之后生成的avi在缩略图时不再异常,问题解决。
说明:如有更好方法欢迎指出。谢谢。
相关文章推荐
- OpenFileDialog.ShowDialog() 提示 未处理 accesViolatinException 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
- 连接数据库失败 错误提示:尝试读取或写入受保护的内存。这通常指示其他内存已损坏
- C# winform程序运行过程中提示"尝试读取或写入受保护的内存.这通常指示其他内存已损坏的"
- 连接数据库失败 错误提示:尝试读取或写入受保护的内存。这通常指示其他内存已损坏
- c#.net 访问SQL SERVER 时提示:尝试读取或写入受保护的内存。这通常指示其他内存已损坏
- 连接数据库失败 错误提示:尝试读取或写入受保护的内存。这通常指示其他内存已损坏
- 关于 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。的解决方法
- 关于“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”的解决
- C#尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
- 尝试读取或写入受保护的内存。这通常指示其他内存已损坏
- C# 尝试读取或写入受保护的内存 。这通常指示其他内存已损坏。
- 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。(System.Data)
- 关于“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”的解决
- 中控 尝试读取或写入受保护的内存。这通常指示其他内存已损坏
- C#尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
- C#尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
- C#尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
- 尝试读取或写入受保护的内存。这通常指示其他内存已损坏
- "尝试读取或写入受保护的内存。这通常指示其他内存已损坏。"
- 尝试读取或写入受保护的内存。这通常指示其他内存已损坏