使用SharpAVI录制屏幕,为什么我的.avi文件为空?

时间:2018-11-08 21:09:32

标签: c# .net bitmap

我正在一个项目中,我需要记录屏幕一段固定的时间,然后将记录保存到.avi文件中。我发现了SharpAvi库,因此我一直在学习如何基于该库实现解决方案。但是,当我运行该程序时,.avi文件中没有任何内容(但仍会播放记录的时间)。

保存位图的方式是否有问题?我是C#的新手,所以如果无法正确提出问题,我深表歉意。

    private static Bitmap SaveScreen()
    {
        Size s = Screen.PrimaryScreen.Bounds.Size;
        Bitmap bmp = new Bitmap(s.Width, s.Height);
        Graphics g = Graphics.FromImage(bmp);
        g.CopyFromScreen(0, 0, 0, 0, s);
        g.DrawImage(bmp, 10, 10);
        return bmp;
    }

    public static byte[] ImageToByte(Image img)
    {
        ImageConverter converter = new ImageConverter();
        return (byte[])converter.ConvertTo(img, typeof(byte[]));
    }

    static void Main(string[] args)
    {

        AviWriter writer = new AviWriter("test.avi")
        {
            FramesPerSecond = 30,
            EmitIndex1 = true
        };

        var stream = writer.AddVideoStream();
        stream.Width = 640;
        stream.Height = 480;

        stream.Codec = KnownFourCCs.Codecs.Uncompressed;
        stream.BitsPerPixel = BitsPerPixel.Bpp32;


        var frameData = new byte[stream.Width * stream.Height * 4];


        while (!Console.KeyAvailable)
        {
            frameData = ImageToByte(SaveScreen());
            stream.WriteFrame(true, frameData, 0, frameData.Length);
        }

        writer.Close();

0 个答案:

没有答案