继续上一篇blog
using
System;
using System.Runtime.InteropServices;
using System.Drawing;
using System.Drawing.Imaging;
namespace org.loon.util
{
/// <summary>
/// AVIWriter 的摘要说明,chenpeng,Email:ceponline@yahoo.com.cn。
/// </summary>
public class AVIWriter
{
const string AVIFILE32 = "AVIFIL32";
private int _pfile = 0;
private IntPtr _ps = new IntPtr(0);
private IntPtr _psCompressed = new IntPtr(0);
private UInt32 _frameRate = 0;
private int _count = 0;
private UInt32 _width = 0;
private UInt32 _stride = 0;
private UInt32 _height = 0;
//avi标识
private UInt32 _fccType = 1935960438; // vids
private UInt32 _fccHandler = 808810089;// IV50
private Bitmap _bmp;
[DllImport(AVIFILE32)]
private static extern void AVIFileInit();
[DllImport(AVIFILE32)]
private static extern int AVIFileOpenW(ref int ptr_pfile, [MarshalAs(UnmanagedType.LPWStr)]string fileName, int flags, int dummy);
[DllImport(AVIFILE32)]
private static extern int AVIFileCreateStream(int ptr_pfile, out IntPtr ptr_ptr_avi, ref AVISTREAMINFOW ptr_streaminfo);
[DllImport(AVIFILE32)]
private static extern int AVIMakeCompressedStream(out IntPtr ppsCompressed, IntPtr aviStream, ref AVICOMPRESSOPTIONS ao, int dummy);
[DllImport(AVIFILE32)]
private static extern int AVIStreamSetFormat(IntPtr aviStream, Int32 lPos, ref BITMAPINFOHEADER lpFormat, Int32 cbFormat);
[DllImport(AVIFILE32)]
unsafe private static extern int AVISaveOptions(int hwnd, UInt32 flags,int nStreams, IntPtr* ptr_ptr_avi, AVICOMPRESSOPTIONS** ao);
[DllImport(AVIFILE32)]
private static extern int AVIStreamWrite(IntPtr aviStream, Int32 lStart,Int32 lSamples, IntPtr lpBuffer, Int32 cbBuffer, Int32 dwFlags, Int32 dummy1, Int32 dummy2);
[DllImport(AVIFILE32)]
private static extern int AVIStreamRelease(IntPtr aviStream);
[DllImport(AVIFILE32)]
private static extern int AVIFileRelease(int pfile);
[DllImport(AVIFILE32)]
private static extern void AVIFileExit();
[StructLayout(LayoutKind.Sequential, Pack = 1)]
private struct AVISTREAMINFOW
{
public UInt32 fccType;
public UInt32 fccHandler;
public UInt32 dwFlags;
public UInt32 dwCaps;
public UInt16 wPriority;
using System.Runtime.InteropServices;
using System.Drawing;
using System.Drawing.Imaging;
namespace org.loon.util
{
/// <summary>
/// AVIWriter 的摘要说明,chenpeng,Email:ceponline@yahoo.com.cn。
/// </summary>
public class AVIWriter
{
const string AVIFILE32 = "AVIFIL32";
private int _pfile = 0;
private IntPtr _ps = new IntPtr(0);
private IntPtr _psCompressed = new IntPtr(0);
private UInt32 _frameRate = 0;
private int _count = 0;
private UInt32 _width = 0;
private UInt32 _stride = 0;
private UInt32 _height = 0;
//avi标识
private UInt32 _fccType = 1935960438; // vids
private UInt32 _fccHandler = 808810089;// IV50
private Bitmap _bmp;
[DllImport(AVIFILE32)]
private static extern void AVIFileInit();
[DllImport(AVIFILE32)]
private static extern int AVIFileOpenW(ref int ptr_pfile, [MarshalAs(UnmanagedType.LPWStr)]string fileName, int flags, int dummy);
[DllImport(AVIFILE32)]
private static extern int AVIFileCreateStream(int ptr_pfile, out IntPtr ptr_ptr_avi, ref AVISTREAMINFOW ptr_streaminfo);
[DllImport(AVIFILE32)]
private static extern int AVIMakeCompressedStream(out IntPtr ppsCompressed, IntPtr aviStream, ref AVICOMPRESSOPTIONS ao, int dummy);
[DllImport(AVIFILE32)]
private static extern int AVIStreamSetFormat(IntPtr aviStream, Int32 lPos, ref BITMAPINFOHEADER lpFormat, Int32 cbFormat);
[DllImport(AVIFILE32)]
unsafe private static extern int AVISaveOptions(int hwnd, UInt32 flags,int nStreams, IntPtr* ptr_ptr_avi, AVICOMPRESSOPTIONS** ao);
[DllImport(AVIFILE32)]
private static extern int AVIStreamWrite(IntPtr aviStream, Int32 lStart,Int32 lSamples, IntPtr lpBuffer, Int32 cbBuffer, Int32 dwFlags, Int32 dummy1, Int32 dummy2);
[DllImport(AVIFILE32)]
private static extern int AVIStreamRelease(IntPtr aviStream);
[DllImport(AVIFILE32)]
private static extern int AVIFileRelease(int pfile);
[DllImport(AVIFILE32)]
private static extern void AVIFileExit();
[StructLayout(LayoutKind.Sequential, Pack = 1)]
private struct AVISTREAMINFOW
{
public UInt32 fccType;
public UInt32 fccHandler;
public UInt32 dwFlags;
public UInt32 dwCaps;
public UInt16 wPriority;