我正在尝试使用DirectShow过滤器从网络摄像头获取图像。
我想在PictureBox上显示该图像
为此,我必须旋转该图像。
代码示例:
public int BufferCB(double sampleTime, IntPtr pbuffer, int bufferLen)
{
if (pbuffer == IntPtr.Zero || bufferLen == 0) return 0;
var timeStamp = TimeSpan.FromSeconds(sampleTime);
var image = new Bitmap(_videoResolution.Width, _videoResolution.Height, _stride, PixelFormat.Format24bppRgb, pbuffer);
image.RotateFlip(RotateFlipType.Rotate180FlipX);
RaiseFrameGrabbedEvent(image, timeStamp, pbuffer);
return 0;
}
有没有办法避免轮换。</ p>
答案 0 :(得分:1)
您需要翻转图像,因为视频RGB格式的正常行顺序是相反的,即从下到上的图像。 Bitmap
类构造函数以从上到下的顺序获取图像行。
您可以加载翻转的图片并通过image.RotateFlip
调用进行更正。
或者,您可以逐行将图像加载到Bitmap实例,以相反的顺序提供它们。如果您为第一行提供负步幅和相应的偏移量(某些API接受此,其他API不接受),也许它也可以立即解决。
或者,您可以将Sample Grabber设置为使用带有负步幅的RGB格式,在这种情况下,抓取器缓冲区将具有正确的行顺序,但是这需要在管道中对此类RGB格式提供某些支持,这是不可能的。
最终,在大多数情况下,您必须按照现在的方式进行翻转,或者将图像数据加载到位图,如上所述。