C# Bitmap与H264编解码

using System;
using System.Drawing;
using System.Drawing.Imaging;

namespace H264Demo
{
    internal class Program
    {
        static void Main(string[] args)
        {
            var bitmap = new Bitmap("test.jpg");
            string DllName = "openh264-2.5.1-win32.dll"; 
            var encoder = new OpenH264Lib.Encoder(DllName);
            var decoder = new OpenH264Lib.Decoder(DllName);

            OpenH264Lib.Encoder.OnEncodeCallback onEncode = (data, length, frameType) =>
            {
                var keyFrame = (frameType == OpenH264Lib.Encoder.FrameType.IDR) || (frameType == OpenH264Lib.Encoder.FrameType.I);
                Console.WriteLine("Encord {0} bytes, KeyFrame:{1}", length, keyFrame);

                // decode it to Bitmap again...
                var temp = decoder.Decode(data, length);
                if (temp != null)
                {
                    Console.WriteLine(temp.Size); 
                    
                    temp.Save($"temp_{DateTime.Now.ToString("yyyyMMdd_HHmmss")}.jpg", ImageFormat.Jpeg); 

                    temp.Dispose();
                }
            };

            // setup encoder
            float fps = 25.0f;
            int bps = 5000 * 1000;         // target bitrate. 5Mbps.
            float keyFrameInterval = 1.0f; // insert key frame interval. unit is second.
            encoder.Setup(1920, 1080, bps, fps, keyFrameInterval, onEncode);

            for (int i = 0; i < 2; i++)// 至少两张图
            {
                encoder.Encode(bitmap);
            }

            //bitmap.Dispose();

            Console.ReadLine();
        }
    }
}

 

posted @ 2025-03-20 09:51  CHHC  阅读(45)  评论(0)    收藏  举报