Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在没有AVISaveOptions对话框的情况下获取AVICOMPRESSOPTIONS?_C#_.net_Avi_Vfw - Fatal编程技术网

C# 如何在没有AVISaveOptions对话框的情况下获取AVICOMPRESSOPTIONS?

C# 如何在没有AVISaveOptions对话框的情况下获取AVICOMPRESSOPTIONS?,c#,.net,avi,vfw,C#,.net,Avi,Vfw,我正在尝试使用我在网上找到的一个示例(记不清确切的源代码),通过编程从位图生成一个AVI文件 这是我获取选项的代码 unsafe private void SetOptions() { AVICOMPRESSOPTIONS opts = new AVICOMPRESSOPTIONS(); opts.fccType = 0; //fccType_; opts.fccHandler = 541215044;/

我正在尝试使用我在网上找到的一个示例(记不清确切的源代码),通过编程从位图生成一个AVI文件

这是我获取选项的代码

    unsafe private void SetOptions() {

        AVICOMPRESSOPTIONS opts = new AVICOMPRESSOPTIONS();
        opts.fccType           = 0; //fccType_;
        opts.fccHandler        = 541215044;//0;//fccHandler_;
        opts.dwKeyFrameEvery   = 0;
        opts.dwQuality         = 0;  // 0 .. 10000
        opts.dwFlags           = 8;//0;  // AVICOMRPESSF_KEYFRAMES = 4
        opts.dwBytesPerSecond  = 0;
        opts.lpFormat          = (System.IntPtr)0; //new IntPtr(0);
        opts.cbFormat          = 0;
        opts.lpParms           = (System.IntPtr)0; //new IntPtr(0);
        opts.cbParms           = 3232;//0;
        opts.dwInterleaveEvery = 0;


        AVICOMPRESSOPTIONS* p = &opts;
        AVICOMPRESSOPTIONS** pp = &p;

        IntPtr x       = ps_;
        IntPtr* ptr_ps = &x;

        AVISaveOptions(0,0,1,ptr_ps,pp);

        // TODO: AVISaveOptionsFree(...)

        int hr = AVIMakeCompressedStream(out psCompressed_, ps_, ref opts, 0);
        if (hr != 0) {
            throw new AviException("AVIMakeCompressedStream");
        }

        BITMAPINFOHEADER bi    = new BITMAPINFOHEADER();
        bi.biSize         = 40;
        bi.biWidth        = (Int32) width_;
        bi.biHeight       = (Int32) height_;
        bi.biPlanes       = 1;
        bi.biBitCount     = 24;
        bi.biCompression  = 0;  // 0 = BI_RGB
        bi.biSizeImage    = stride_*height_;
        bi.biXPelsPerMeter= 0;
        bi.biYPelsPerMeter= 0;
        bi.biClrUsed      = 0;
        bi.biClrImportant = 0;

        hr = AVIStreamSetFormat(psCompressed_, 0, ref bi, 40);
        if (hr != 0) {
            throw new AviException("AVIStreamSetFormat",hr);
        }
    }
但是,我不想显示AVISaveOptions对话框,我更愿意在后端完成这一切,我已经搜索了几个小时,但到目前为止没有发现任何有用的东西,除了以下内容:


因此,我的问题是,在不显示对话框的情况下,我将如何进行此操作,和/或如何以编程方式填充压缩选项?

最后通过注册表获取所有已安装编解码器的列表,然后创建一个FourCC,并使用它设置fccType和fccHandler。

我也刚刚遇到过。如果我创建了一个类似的函数,将数据序列化为一个文件,然后将此文件包含在程序集中,那么它会起作用吗?您有所有用于此的API,例如..@Emest Mallett:您可以给出一些代码来说明如何解决此问题吗?因为我也面临着同样的问题problem@EmestMallett:你是如何设置压缩对象的值的,比如fccType、fccHandler等?