# bitmap2vidc **Repository Path**: black-technology/bitmap2vidc ## Basic Information - **Project Name**: bitmap2vidc - **Description**: 将Bitmap实例合成为avi视频流的api - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2023-10-07 - **Last Updated**: 2023-10-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Bitmap2VidC - 图片逐帧合成器 Bitmap2VidC (Bitmap To Video Converter)是一个基于.NET Framework开发的的类库,用于将一组Bitmap实例转换成AVI格式的视频流。 ## 用法 **将bitmap2vid.dll加入你的项目中的引用中** 加入引用后就可以调用里面的API函数了。 **初始化** 请确保需要合成为视频的图片格式保持一致,然后使用以下方法将它们加载入内存: ```c# List bitmaps = new List(); DirectoryInfo d = new DirectoryInfo("{ImagePath}"); FileInfo[] fs = d.GetFiles(); //获取{ImagePath}路径下的所有图片的文件信息 ``` **装载生成的Bitmap实例** 在得到路径下所有图片的文件信息后,通过每个文件的全名(绝对路径+文件名)逐个生成Bitmap实例并装载进List数组中。 ```c# foreach (FileInfo f in fs) { bitmaps.Add(new Bitmap(f.FullName)); //使用的Bitmap的构造器参数为每个文件的完整路径 } ``` **开始合成** 添加引用的命名空间: ```c# using com.aotto.cn.csharp.awiz.api; ``` 建立新的合成器对象,并指定生成视频的帧率 ```c# BitmapToVideoConverter b2vc = new BitmapToVideoConverter(8); //8 fps ``` 设定生成视频的路径,以及以何种方式创建视频: ```C# b2vc.Generate(bitmaps.ToArray(), "{OutputPath}", BitmapToVideoConverter.ActionOptions.Create); //ActionOptions.Open: 覆写原有视频 //{OutputPath}需包含文件名。比如 "C:\\Users\\User\\demo.avi" ``` 运行即可。 ## 开发者指南 1. 上面的代码示例演示了通过将一组图片加载入内存之后(生成一组Bitmap对象)再使用bitmap2vidc转换成视频流的过程。而在实际开发中使用本类库则不需要对仪器传回的图像数据进行持久化处理,只需要将仪器传回的图像原始二进制数据简单封装为Bitmap对象之后装载进ArrayList或者数组再调用API即可。 在生产环境中,仪器可能会传回大量的图像原始数据。**开发者应该限制装载Bitmap实例的ArrayList或者数据的容量**。当原始图像数据被封装成一定数量的Bitmap实例之后,就应调用Generate()方法进行持久化。 另外一种可行的思路是,利用可扩容的ArrayList实时接收Bitmap对象,在工控机系统上设置一个按钮,按钮按下的时候再调用Generate()方法,随后销毁老年代对象。 2. 如果图片原始数据(包含了分辨率信息)的分辨率不一致,生成的AVI视频将无法正常播放,**所以请务必针对每一个仪器传回的图像数据进行单独处理**。 3. 在代码中创建合成器对象的时候,尽量在构造器中指定生成视频的帧率,且手动指定的帧率应不高于25fps。 ## API函数简述 下面来简要讲述提供的API函数。 **BitMapToVideoConverter类** 构造器源代码: ```c# public partial class BitmapToVideoConverter { private double framerate = 30; /// /// .ctor() /// public BitmapToVideoConverter() {} /// /// .ctor() /// /// 输出视频的帧率 public BitmapToVideoConverter(double framerate) { this.framerate = framerate; } } ``` 在建立转换器对象的时候,应指定帧率,否则按默认的30fps生成视频。 **BitMapToVideoConverter.Generate()函数** ```c# public partial class BitmapToVideoConverter { /// /// 在一个线程中将一组Bitmap对象转换成avi视频。需要在构造器中手动指定framerate。 /// /// 一组Bitmap实例 /// Avi视频的输出路径(路径+文件名) /// 新建或保存文件 /// 状态码。成功为true,否则为false public void Generate(Bitmap[] bitmaps, string outputPath, ActionOptions actOptions) } ``` bitmaps: 一组Bitmap实例 outputPath: 生成视频的路径 ActionOptions: 以何种方式生成视频。如:ActionOptions.Create ActionOptions枚举定义: ```c# public partial class BitmapToVideoConverter { public enum ActionOptions { /// /// 覆盖已知文件 /// Open, /// /// 创建新文件 /// Create } } ```