Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.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# 如何将包含多个控件动画的面板录制为GIF?(WINFORM)_C#_Winforms - Fatal编程技术网

C# 如何将包含多个控件动画的面板录制为GIF?(WINFORM)

C# 如何将包含多个控件动画的面板录制为GIF?(WINFORM),c#,winforms,C#,Winforms,我有一个这样的面板,有很多控件。我想在一个事件触发时记录这个面板,并在另一个事件触发时结束。我花了两天时间来寻找解决方案。我希望有人能帮我处理这件事。tks 你有没有试过什么? 这个怎么样: 添加参考: PresentationCore.dll System.Xaml.dll WindowsBase.dll 将变量添加到表单中: List<Bitmap> bitmapList = new List<Bitmap>(); 调用此方法从保存的帧创建Gif: private

我有一个这样的面板,有很多控件。我想在一个事件触发时记录这个面板,并在另一个事件触发时结束。我花了两天时间来寻找解决方案。我希望有人能帮我处理这件事。tks
你有没有试过什么? 这个怎么样:

添加参考:

PresentationCore.dll
System.Xaml.dll
WindowsBase.dll
将变量添加到表单中:

List<Bitmap> bitmapList = new List<Bitmap>();
调用此方法从保存的帧创建Gif:

private void SaveGif()
{
    System.Windows.Media.Imaging.GifBitmapEncoder gEnc = new System.Windows.Media.Imaging.GifBitmapEncoder();
    foreach (var bmp in bitmapList)
    {
        var hbmp = bmp.GetHbitmap();
        var src = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(hbmp, IntPtr.Zero, System.Windows.Int32Rect.Empty, System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
        gEnc.Frames.Add(System.Windows.Media.Imaging.BitmapFrame.Create(src));
    }

    using (FileStream fs = new FileStream(@"C:\panel1.gif", FileMode.Create))
    {
        gEnc.Save(fs);
    }
    bitmapList.Clear();
}

在旧版本中,我使用定时器制作动画,并捕捉屏幕上的每一帧。将其合并并导出为gif文件。现在我使用一个库来支持动画的控制,它使动画清晰和快速。我只是声明变量并使用它。所以我不能再用定时器来筛选每一个了。我选择了一个解决方案记录一个面板并导出到GIF文件。关于你的解决方案。我无法在每个动画中拍摄图像。你能给我看一个我们记录面板的解决方案吗。我们可以使用任何工具来实现这一点:一个框架,一个像bandicam这样的软件,。。。。什么都可以做。你能帮我吗?
private void SaveGif()
{
    System.Windows.Media.Imaging.GifBitmapEncoder gEnc = new System.Windows.Media.Imaging.GifBitmapEncoder();
    foreach (var bmp in bitmapList)
    {
        var hbmp = bmp.GetHbitmap();
        var src = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(hbmp, IntPtr.Zero, System.Windows.Int32Rect.Empty, System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
        gEnc.Frames.Add(System.Windows.Media.Imaging.BitmapFrame.Create(src));
    }

    using (FileStream fs = new FileStream(@"C:\panel1.gif", FileMode.Create))
    {
        gEnc.Save(fs);
    }
    bitmapList.Clear();
}