コード例 #1
0
        /// <summary>
        /// Saves the video.
        /// </summary>
        /// <param name="fileName">Name of the file.</param>
        /// <param name="profileFileName">Name of the profile file.</param>
        /// <param name="files">Files.</param>
        public static void SaveVideo(string fileName, string profileFileName, ulong framesPerSecond, string [] files)
        {
            WMEncoder      encoder = new WMEncoder();
            IWMEncProfile2 profile = WMEncProfile.LoadEncodingProfile(encoder, profileFileName);

            WMEncProfile.ReleaseEncoder(ref encoder);

            using (WmvWriter writer = new WmvWriter())
            {
                writer.Initialize((IWMProfile)profile.SaveToIWMProfile(), fileName);

                VideoInfoHeader viHeader = new VideoInfoHeader();
                writer.FindVideoInputFormat(0, MediaSubTypes.WMMEDIASUBTYPE_RGB24, ref viHeader, false);
                writer.Start();

                INSSBuffer sample  = null;
                int        bmcount = 0;
                Bitmap     frame   = new Bitmap((int)viHeader.bmiHeader.biWidth, (int)viHeader.bmiHeader.biHeight, PixelFormat.Format24bppRgb);;
                ulong      fps     = framesPerSecond;

                for (int i = 0; i < files.Length; i++)
                {
                    if (files[i] != null)
                    {
                        Bitmap bmp = new Bitmap(files[i]);
                        using (Graphics g = Graphics.FromImage(frame))
                        {
                            g.InterpolationMode  = InterpolationMode.HighQualityBicubic;
                            g.CompositingQuality = CompositingQuality.HighQuality;
                            g.SmoothingMode      = SmoothingMode.HighQuality;
                            g.PixelOffsetMode    = PixelOffsetMode.HighQuality;
                            g.DrawImage(bmp, 0, 0, frame.Width, frame.Height);
                            Console.Out.Write(".");
                        }

                        // Now render to the movie
                        try
                        {
                            ulong time = ((ulong)bmcount++ *TimeSpan.TicksPerSecond) / fps;
                            sample = writer.GetSampleFromBitmap(frame);
                            writer.Writer.WriteSample(0, time, (uint)WMT_STREAM_SAMPLE_TYPE.WM_SF_CLEANPOINT, sample);
                        }
                        finally
                        {
                            Marshal.ReleaseComObject(sample);
                            sample = null;
                            bmp    = null;
                            GC.Collect();
                        }
                    }
                }
            }
        }
コード例 #2
0
        /// <summary>
        /// Saves the video.
        /// </summary>
        /// <param name="fileName">Name of the file.</param>
        /// <param name="profileFileName">Name of the profile file.</param>
        /// <param name="dr">Dr.</param>
        public static void SaveVideo(string fileName, string profileFileName, ulong framesPerSecond, SqlDataReader dr)
        {
            WMEncoder      encoder = new WMEncoder();
            IWMEncProfile2 profile = WMEncProfile.LoadEncodingProfile(encoder, profileFileName);

            WMEncProfile.ReleaseEncoder(ref encoder);

            using (WmvWriter writer = new WmvWriter())
            {
                writer.Initialize((IWMProfile)profile.SaveToIWMProfile(), fileName);

                VideoInfoHeader viHeader = new VideoInfoHeader();
                writer.FindVideoInputFormat(0, MediaSubTypes.WMMEDIASUBTYPE_RGB24, ref viHeader, false);
                writer.Start();


                INSSBuffer sample  = null;
                int        bmcount = 0;
                Bitmap     c       = new Bitmap((int)viHeader.bmiHeader.biWidth, (int)viHeader.bmiHeader.biHeight, PixelFormat.Format24bppRgb);;
                ulong      fps     = viHeader.AvgTimePerFrame / 100000;

                while (dr.Read())
                {
                    Bitmap b = Image.FromStream(new MemoryStream(dr.GetValue(1) as byte[])) as Bitmap;

                    using (Graphics g = Graphics.FromImage(c))
                    {
                        g.InterpolationMode  = InterpolationMode.HighQualityBicubic;
                        g.CompositingQuality = CompositingQuality.HighQuality;
                        g.SmoothingMode      = SmoothingMode.HighQuality;
                        g.PixelOffsetMode    = PixelOffsetMode.HighQuality;
                        g.DrawImage(b, 0, 0, c.Width, c.Height);
                    }

                    try
                    {
                        ulong time = ((ulong)bmcount++ *TimeSpan.TicksPerSecond) / fps;
                        sample = writer.GetSampleFromBitmap(c);
                        writer.Writer.WriteSample(0, time, (uint)WMT_STREAM_SAMPLE_TYPE.WM_SF_CLEANPOINT, sample);
                    }
                    finally
                    {
                        Marshal.ReleaseComObject(sample);
                        sample = null;
                        b      = null;
                        GC.Collect();
                    }
                }
            }
        }