C# 如何在c中从.avi文件中获取纵横比#

C# 如何在c中从.avi文件中获取纵横比#,c#,winforms,video,directshow,aspect-ratio,C#,Winforms,Video,Directshow,Aspect Ratio,我已经获得了一个.avi电影,我必须使用DirectShow lib来显示它。所以我使用pictureBox逐帧显示位图图像,但我希望保持纵横比。如何在Windows窗体中执行此操作。提前谢谢。 编辑:我必须以相同的纵横比存储一些位图图像。AVI格式不支持视频的纵横比,因此您只能根据视频流的像素分辨率假设平方像素和纵横比。从流中获取特定帧/位图的大多数方法都可以使图像达到原始视频分辨率。试图保留纵横比的位图的进一步操作假设您对图像尺寸进行简单的数学计算:您适当缩放绘制图像的控件或区域:原始宽度*

我已经获得了一个.avi电影,我必须使用DirectShow lib来显示它。所以我使用pictureBox逐帧显示位图图像,但我希望保持纵横比。如何在Windows窗体中执行此操作。提前谢谢。
编辑:我必须以相同的纵横比存储一些位图图像。

AVI格式不支持视频的纵横比,因此您只能根据视频流的像素分辨率假设平方像素和纵横比。从流中获取特定帧/位图的大多数方法都可以使图像达到原始视频分辨率。试图保留纵横比的位图的进一步操作假设您对图像尺寸进行简单的数学计算:您适当缩放绘制图像的控件或区域:原始宽度*表示高度=原始高度*表示宽度。或者简单地利用WinForms控件保持纵横比的能力(如果适用)


当您使用DirectShow API(视频渲染器)呈现视频时,有一个选项可以保持纵横比不变,但是根据您使用的渲染器版本的不同,纵横比会略有不同。

PictureBox会为您执行此操作。您可以显示图像居中(最终裁剪)或缩放(保持纵横比)。如果您使用DS,为什么要显示位图而不是运行视频?实际上,我也处理过电影的帧。当您从DS获得位图时,它不会更改AR,因此应为原始ARin格式:md.WriteBitmapBits(帧数/帧率、长度、宽度、文件名+“.bmp”);我们必须输入尺寸。视频的高度是否与分辨率高度相同…或者更准确地说,视频的高度与宽度之比是否与分辨率高度与宽度之比相同。在AVI文件中,是的,因为描述符没有字段来覆盖该比率。其他容器可能更灵活,并且具有像素分辨率,也具有separate纵横比。通过这种方式,可以定义所谓的“非方形像素”和有效的纵横比调整。在mpg格式的情况下,像素是“非方形”?就像我必须使用avi和mpg视频一样。提前感谢:)MPEG流可能具有纵横比信息,因此可以定义非方形像素。这并不意味着这些文件总是存在纵横比与像素分辨率不匹配的情况。