Exemplo n.º 1
8
        static void Main(string[] args)
        {
            string outputFile = "test-output.wmv";
            int width = 320;
            int height = 240;

            // create instance of video writer
            VideoFileWriter writer = new VideoFileWriter();
            // create new video file
            writer.Open("test.avi", width, height, 25, VideoCodec.MPEG4);
            // create a bitmap to save into the video file
            Bitmap image = new Bitmap(width, height, PixelFormat.Format24bppRgb);
            // write 1000 video frames
            for (int i = 0; i < 1000; i++)
            {
                image.SetPixel(i % width, i % height, Color.Red);
                writer.WriteVideoFrame(image);
            }
            writer.Close();

            Console.WriteLine("Finished");
            Console.ReadKey();
        }
Exemplo n.º 2
0
 private void capturedWebCamNewFrame(object sender, NewFrameEventArgs eventArgs)
 {
     try
     {
         if (isRecording)
         {
             //TODO
             //센서 데이터 수집 시간과 동기화
             if (firstFrameTime != null)
             {
                 videoFileWriter.WriteVideoFrame(eventArgs.Frame, DateTime.Now - firstFrameTime.Value);
             }
             else
             {
                 videoFileWriter.WriteVideoFrame(eventArgs.Frame);
                 firstFrameTime = DateTime.Now;
             }
         }
         using (var bitmap = (Bitmap)eventArgs.Frame.Clone())
         {
             Image = bitmap.ToBitmapImage();
         }
         Image.Freeze(); // 메모리 누수 방지
     }
     catch (Exception exc)
     {
         MessageBox.Show(exc.Message);
         StopCamera();
     }
 }
Exemplo n.º 3
0
        public void ReadFromVideo(string path)
        {
            pathToFile = new Uri(AnaglyphParameters.VideoPath.LocalPath);
            AnaglyphParameters.PathToRead  = pathToFile.LocalPath;
            AnaglyphParameters.PathToWrite = path.Split('.')[0] + "1.mp4";
            reader.Open(pathToFile.LocalPath);

            SetWriter(reader, writer);


            for (int i = 0; i < reader.FrameCount; i++)
            {
                OnOnFrameDone(i, (int)reader.FrameCount);
                try
                {
                    using (Bitmap videoFrame = reader.ReadVideoFrame(i))
                    {
                        using (Bitmap videoFrameChanged = new Fitler().Calc(videoFrame))
                        {
                            writer.WriteVideoFrame(videoFrameChanged, (uint)i);
                        }
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.StackTrace);
                }
            }
            reader.Close();
            writer.Close();

            VideoToFrames.AddAudioToVideo(path);
            OnOnProcessDone();
        }
Exemplo n.º 4
0
        private void button1_Click(object sender, EventArgs e)
        {
            if (captureDevice.ShowDialog(this) == DialogResult.OK)
            {
                //VideoCaptureDevice videoSource = captureDevice.VideoDevice;
                FinalVideo           = captureDevice.VideoDevice;
                FinalVideo.NewFrame += new NewFrameEventHandler(FinalVideo_NewFrame);
                FinalVideo.Start();
            }
            saveAvi        = new SaveFileDialog();
            saveAvi.Filter = "Avi Files (*.avi)|*.avi";
            if (saveAvi.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                int h = captureDevice.VideoDevice.VideoResolution.FrameSize.Height;
                int w = captureDevice.VideoDevice.VideoResolution.FrameSize.Width;

                FileWriter.Open(saveAvi.FileName, w, h, 20, VideoCodec.MPEG4, 9000000);


                FileWriter.WriteVideoFrame(video);

                //AVIwriter.Open(saveAvi.FileName, w, h);
                button3.Text = "Stop Record";
                //FinalVideo = captureDevice.VideoDevice;
                //FinalVideo.NewFrame += new NewFrameEventHandler(FinalVideo_NewFrame);
                //FinalVideo.Start();
            }
        }
Exemplo n.º 5
0
 private void video_NewFrame(object sender, NewFrameEventArgs eventArgs)
 {
     try
     {
         if (_recording)
         {
             using (var bitmap = (Bitmap)eventArgs.Frame.Clone())
             {
                 if (_firstFrameTime != null)
                 {
                     _writer.WriteVideoFrame(bitmap, DateTime.Now - _firstFrameTime.Value);
                 }
                 else
                 {
                     _writer.WriteVideoFrame(bitmap);
                     _firstFrameTime = DateTime.Now;
                 }
             }
         }
         using (var bitmap = (Bitmap)eventArgs.Frame.Clone())
         {
             var bi = bitmap.ToBitmapImage();
             bi.Freeze();
             Dispatcher.CurrentDispatcher.Invoke(() => Image = bi);
         }
     }
     catch (Exception exc)
     {
         MessageBox.Show("Error on _videoSource_NewFrame:\n" + exc.Message, "Error", MessageBoxButton.OK,
                         MessageBoxImage.Error);
         StopCamera();
     }
 }
Exemplo n.º 6
0
        private void FinalFrame_NewFrame(object sender, NewFrameEventArgs eventArgs)
        {
            try
            {
                if (btnStop.Text == "Lưu")
                {
                    video           = (Bitmap)eventArgs.Frame.Clone();
                    CameraBox.Image = (Bitmap)eventArgs.Frame.Clone();

                    FileWriter.WriteVideoFrame(video);
                }
                else
                {
                    video           = (Bitmap)eventArgs.Frame.Clone();
                    CameraBox.Image = (Bitmap)eventArgs.Frame.Clone();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "New Frame", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }


            /* ^
             * Here it cannot convert implicitly from System.Drawing.Bitmap to
             * System.Windows.Media.ImageSource
             */
        }
Exemplo n.º 7
0
 public void RecordVideo(Bitmap frame)
 {
     lock (this)
     {
         TimeSpan ts;
         try
         {
             if (this._recording && _writer != null)
             {
                 if (firstFrameTime != null)
                 {
                     ts = TimeSpan.FromMilliseconds(DateTime.Now.Subtract(firstFrameTime.Value).TotalMilliseconds);
                     _writer.WriteVideoFrame(frame, ts);
                 }
                 else
                 {
                     _writer.WriteVideoFrame(frame);
                     firstFrameTime = DateTime.Now;
                 }
             }
         }
         catch (Exception ex)
         {
         }
     }
 }
Exemplo n.º 8
0
        private void video_NewFrame_fail(object sender, NewFrameEventArgs eventArgs)
        {
            using (Bitmap videoimg = (Bitmap)eventArgs.Frame.Clone())
            {
                try
                {
                    //pictureBox1.Image = (Bitmap)eventArgs.Frame.Clone();
                    // save image to file
                    if (m_startrecording && FileWriter.IsOpen && videoimg != null)
                    {
                        FileWriter.WriteVideoFrame(videoimg);
                        FileWriter.Flush();
                    }
                    pictureBox1.Image = videoimg;// (Bitmap)eventArgs.Frame.Clone();
                }
                catch
                {
                    Console.WriteLine("object is used somewhere else");
                }
            }


            //do processing here

            //videoimg.Dispose();
        }
Exemplo n.º 9
0
 /// <summary>
 /// 通常の記録方式
 /// </summary>
 /// <param name="bitmap">ビデオフレームに追加するbitmap</param>
 private void WriteFrame(Graphics g)
 {
     g.CopyFromScreen(new Point(_captureRect.X, _captureRect.Y), new Point(0, 0), _bitmap.Size);
     ImageProcessing(g);
     mpegWriter.WriteVideoFrame(_bitmap);
     _writed_frame += 1;
 }
Exemplo n.º 10
0
        // New frame received by the player
        private void videoSourcePlayer_NewFrame(object sender, NewFrameEventArgs args)
        {
            DateTime now = DateTime.Now;
            Graphics g   = Graphics.FromImage(args.Frame);

            // paint current time
            SolidBrush brush = new SolidBrush(Color.Red);

            g.DrawString(now.ToString(), this.Font, brush, new PointF(5, 5));
            brush.Dispose();

            g.Dispose();


            if (isNeedRecord)
            {
                using (var bitmap = (Bitmap)args.Frame.Clone())
                {
                    if (_firstFrameTime != null)
                    {
                        _writer.WriteVideoFrame(bitmap, DateTime.Now - _firstFrameTime.Value);
                    }
                    else
                    {
                        _writer.WriteVideoFrame(bitmap);
                        _firstFrameTime = DateTime.Now;
                    }
                }
            }
        }
Exemplo n.º 11
0
 private void show_video(object sender, NewFrameEventArgs eventArgs)
 {
     if (isShooting)
     {
         videoWriter.WriteVideoFrame(eventArgs.Frame);
     }
 }
Exemplo n.º 12
0
 public void video_NewFrame(object sender, NewFrameEventArgs eventArgs)
 {
     try
     {
         if (_recording)
         {
             using (var bitmap = (Bitmap)eventArgs.Frame.Clone())
             {
                 if (_firstFrameTime != null)
                 {
                     System.Console.SetOut(new System.IO.StreamWriter(System.IO.Stream.Null));
                     _writer.WriteVideoFrame(bitmap, DateTime.Now - _firstFrameTime.Value);
                 }
                 else
                 {
                     System.Console.SetOut(new System.IO.StreamWriter(System.IO.Stream.Null));
                     _writer.WriteVideoFrame(bitmap);
                     _firstFrameTime = DateTime.Now;
                 }
             }
         }
         using (var bitmap = (Bitmap)eventArgs.Frame.Clone())
         {
             var bi = bitmap.ToBitmapImage();
             bi.Freeze();
             Dispatcher.CurrentDispatcher.Invoke(() => Image = bi);
         }
     }
     catch (Exception exc) { }
 }
        public void StartVideoRecording(Bitmap frame)
        {
            _videoDurationTracker++;

            var durationOfRecordedVideoChunk = SettingsService.GetApplicationSettings().DurationOfRecordedVideoChunk;
            var chunkTimeSize = _frapsPerMinute * durationOfRecordedVideoChunk;

            if (_videoDurationTracker % chunkTimeSize == 0 || !_writer.IsOpen)
            {
                var filePath = AppDomain
                               .CurrentDomain
                               .BaseDirectory + "SurvellianceMaterials\\" + $"{CameraName.GetVideoFileName()}" + ".avi";
                _writer.Close();
                _writer.Open(filePath, (int)Width, (int)Height);
                _videoDurationTracker = 0;
            }

            if (_firstFrameTime != null)
            {
                _writer.WriteVideoFrame(frame);
            }
            else
            {
                _writer.WriteVideoFrame(frame);
                _firstFrameTime = DateTime.Now;
            }
        }
Exemplo n.º 14
0
 private void video_NewFrame(object sender, NewFrameEventArgs eventArgs)
 {
     try
     {
         if (_recording)
         {
             if (_firstFrameTime != null)
             {
                 _writer.WriteVideoFrame(eventArgs.Frame, DateTime.Now - _firstFrameTime.Value);
             }
             else
             {
                 _writer.WriteVideoFrame(eventArgs.Frame);
                 _firstFrameTime = DateTime.Now;
             }
         }
         using (var bitmap = (Bitmap)eventArgs.Frame.Clone())
         {
             Image = bitmap.ToBitmapImage();
         }
         Image.Freeze(); // avoid cross thread operations and prevents leaks
     }
     catch (Exception exc)
     {
         MessageBox.Show("Error on _videoSource_NewFrame:\n" + exc.Message, "Error", MessageBoxButton.OK,
                         MessageBoxImage.Error);
         StopCamera();
     }
 }
        private void video_NewFrame(object sender, NewFrameEventArgs eventArgs)
        {
            try
            {
                if (_recording)
                {
                    if (_firstFrameTime != null)
                    {
                        _writer.WriteVideoFrame(eventArgs.Frame, DateTime.Now - _firstFrameTime.Value);
                    }
                    else
                    {
                        _writer.WriteVideoFrame(eventArgs.Frame);
                        _firstFrameTime = DateTime.Now;
                    }
                }



                System.Windows.Threading.Dispatcher.CurrentDispatcher.Invoke((Action)(() =>
                {
                    using (var bitmap = (Bitmap)eventArgs.Frame.Clone())
                    {
                        // Image = bitmap.ToBitmapImage();
                        Application.Current.Dispatcher.Invoke(new Action(() => Image = bitmap.ToBitmapImage()));
                    }
                    Application.Current.Dispatcher.Invoke(new Action(() => Image.Freeze()));

                    // Image.Freeze(); // avoid cross thread operations and prevents leaks
                }));
            }
            catch (Exception)
            {
            }
        }
Exemplo n.º 16
0
        private void CameraOne_NewFrame(object sender, NewFrameEventArgs eventArgs)
        {
            if (isRecording1)
            {
                using (var bitmap = (Bitmap)eventArgs.Frame.Clone())
                {
                    if (firstFrameTime != null)
                    {
                        writer.WriteVideoFrame(bitmap, DateTime.Now - firstFrameTime.Value);
                    }
                    else
                    {
                        writer.WriteVideoFrame(bitmap);
                        firstFrameTime = DateTime.Now;
                    }
                }
            }

            Bitmap bitmap1 = (Bitmap)eventArgs.Frame.Clone();
            BrightnessCorrection br = new BrightnessCorrection(brightess1);
            ContrastCorrection cr = new ContrastCorrection(contrast1);
            SaturationCorrection sr = new SaturationCorrection(saturation1);
            bitmap1 = br.Apply((Bitmap)bitmap1.Clone());
            bitmap1 = cr.Apply((Bitmap)bitmap1.Clone());
            bitmap1 = sr.Apply((Bitmap)bitmap1.Clone());
            try
            { 
                pbCam1.Image = bitmap1;
            }
            catch (NullReferenceException ex)
            {
                Console.WriteLine("A problem with image loading occured! You may want to close other apps using your camera!");
            }
        }
Exemplo n.º 17
0
        public void video_NewFrame(object sender, NewFrameEventArgs eventArgs)
        {
            try
            {
                if (_recording)
                {
                    if (_firstFrameTime != null)
                    {
                        _writer.WriteVideoFrame(eventArgs.Frame, DateTime.Now - _firstFrameTime.Value);
                    }
                    else
                    {
                        _writer.WriteVideoFrame(eventArgs.Frame);
                        _firstFrameTime = DateTime.Now;
                    }
                }


                using (var bitmap = eventArgs.Frame)
                {
                    Image = ToBitmapImage(bitmap);
                }
                Image.Freeze(); // avoid cross thread operations and prevents leaks

                Dispatcher.BeginInvoke(new ThreadStart(delegate { VideoPlayer.Source = Image; }));
            }
            catch (Exception exc)
            {
                MessageBox.Show(String.Format("Error on _videoSource_NewFrame:{0}\n", exc.Message), "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                myCamera.Stop();
                _recording = false;
            }
        }
Exemplo n.º 18
0
        private void encode()
        {
            Stopwatch stopwatch = new Stopwatch();

            updateData((float)encodedFrameCount / totalFrameCount,
                       false,
                       stopwatch.Elapsed.TotalSeconds * (totalFrameCount - encodedFrameCount));


            while (true)
            {
                if (imageQueue.Count > 0)
                {
                    stopwatch.Restart();

                    encoder.WriteVideoFrame(imageQueue.Dequeue());
                    encodedFrameCount++;
                    stopwatch.Stop();
                    updateData((float)encodedFrameCount / totalFrameCount,
                               false,
                               stopwatch.Elapsed.TotalSeconds * (totalFrameCount - encodedFrameCount));
                }

                if (lastFrame && imageQueue.Count == 0)
                {
                    finalize();
                    finished = true;
                    break;
                }
            }
        }
Exemplo n.º 19
0
        public async void Cam_NewFrame(object sender, NewFrameEventArgs eventArgs)
        {
            //if (fps > maxFPS) {
            //    fps--;
            //    await Task.Delay(30);
            //    return;
            //}
            try
            {
                System.Drawing.Image img = (Bitmap)eventArgs.Frame.Clone();

                if (isRecording)
                {
                    using (var bitmap = (Bitmap)eventArgs.Frame.Clone())
                    {
                        try
                        {
                            if (StartTime != null)
                            {
                                writer.WriteVideoFrame(bitmap, DateTime.Now - StartTime.Value);
                            }
                            else
                            {
                                StartTime = DateTime.Now;
                                writer.WriteVideoFrame(bitmap);
                            }
                        }
                        catch (Exception)
                        {
                        }
                    }
                }


                using (var bitmap = (Bitmap)eventArgs.Frame.Clone())
                {
                    MemoryStream ms = new MemoryStream();


                    bitmap.Save(ms, ImageFormat.Bmp);
                    ms.Seek(0, SeekOrigin.Begin);
                    BitmapImage bi = new BitmapImage();
                    bi.BeginInit();
                    bi.StreamSource = ms;
                    bi.EndInit();

                    bi.Freeze();
                    Dispatcher.Invoke(() =>
                    {
                        frameHolder.Source = bi;
                    });
                    //Dispatcher.CurrentDispatcher.Invoke(() => frameHolder.Source = bi);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("error" + ex.Message);
            }
        }
Exemplo n.º 20
0
        //eventhandler if new frame is ready
        private void video_NewFrame(object sender, NewFrameEventArgs eventArgs)
        {
            videoimg = (Bitmap)eventArgs.Frame.Clone();
            //do processing here
            pictureBox1.Image = videoimg;

            // save image to file
            FileWriter.WriteVideoFrame(videoimg);
        }
Exemplo n.º 21
0
        public void StartRecording(string videofilepath)
        {
            h = videoimg.Height;
            w = videoimg.Width;

            FileWriter.Open(videofilepath, w, h, 25, VideoCodec.Default, 5000000);
            FileWriter.WriteVideoFrame(videoimg);

            m_startrecording = true;
        }
Exemplo n.º 22
0
        private void OnTimedEvent(Object source, ElapsedEventArgs e)
        {
            //Console.WriteLine("The Elapsed event was raised at {0:HH:mm:ss.fff}",e.SignalTime);
            if (aTimer.Enabled)
            {
                if (IsSrc1Dirty && _cam1 != null)
                {
                    //Console.Write("count" + ncount++);
                    // a refresh is needed of source 1
                    try
                    {
                        // always lock image data to prevent accessing of the image from other threads.
                        _cam1.GetImage().EnterLock();

                        this.Invoke((MethodInvoker) delegate() { pictureBoxSource1.Image = _cam1.GetImage().Image; });

                        //pictureBoxSource1.Image = _cam1.GetImage().Image;

                        // save image to file
                        if (m_startrecording && FileWriter.IsOpen)
                        {
                            //StartTick;

                            long currentTick = DateTime.Now.Ticks;
                            var  frameOffset = new TimeSpan(currentTick - StartTick);

                            Bitmap videoimg = (Bitmap)_cam1.GetImage().Image.Clone();

                            FileWriter.WriteVideoFrame(videoimg, frameOffset);
                            FileWriter.Flush();
                            videoimg.Dispose();

                            if (checkBox_csv.Checked)
                            {
                                double[,] pixel_array = _cam1.GetImage().ImageProcessing.GetPixelsArray(); //array containing the raw signal data
                                Thread t_thread = new Thread(() => SaveToCsv(pixel_array));
                                t_thread.Start();
                            }
                        }
                    }
                    catch (Exception)
                    {
                    }
                    finally
                    {
                        // We are done with the image data object, release.
                        _cam1.GetImage().ExitLock();
                        //IsSrc1Dirty = false;
                    }
                }
            }
        }
Exemplo n.º 23
0
        public void SaveVideo(string path, int repeat)
        {
            if (_images == null || _images.Length == 0)
            {
                return;
            }

            using (VideoFileWriter writer = new VideoFileWriter())
            {
                int width = _images[0].Width;
                if (width % 2 == 1)
                {
                    width += 1;
                }

                int height = _images[0].Height;
                if (height % 2 == 1)
                {
                    height += 1;
                }

                int bitRate = 15 * 1024 * 1024;
                writer.Open(path, width, height, 30, VideoCodec.MPEG4, bitRate);

                for (int i = 0; i < repeat; i++)
                {
                    if (Reverse)
                    {
                        for (int j = _images.Length - 1; j > 0; j--)
                        {
                            for (int k = 0; k < 30 / Speed; k++)
                            {
                                writer.WriteVideoFrame((Bitmap)_images[j]);
                            }
                        }
                    }
                    else
                    {
                        for (int j = 0; j < _images.Length; j++)
                        {
                            for (int k = 0; k < 30 / Speed; k++)
                            {
                                writer.WriteVideoFrame((Bitmap)_images[j]);
                            }
                        }
                    }
                }

                writer.Close();
            }
        }
Exemplo n.º 24
0
        private void video_NewFrame(object sender, NewFrameEventArgs eventArgs)
        {
            lock (_lock)
            {
                Thread.Sleep(40);

                try
                {
                    if (_isCameraStart)
                    {
                        using (var bitmap = (Bitmap)eventArgs.Frame.Clone())
                        {
                            _bitmap = bitmap;

                            if (_recording)
                            {
                                _detector.ProcessFrame(bitmap);

                                if (_firstFrameTime != null)
                                {
                                    _writer.WriteVideoFrame(bitmap, DateTime.Now - _firstFrameTime.Value);
                                }
                                else
                                {
                                    _writer.WriteVideoFrame(bitmap);
                                    _firstFrameTime = DateTime.Now;
                                }
                            }
                            else
                            {
                                if (_detector.ProcessFrame(bitmap) > 0.02) // нарушитель замечен
                                {
                                    _logger.Info($"Start recording process | {DateTime.Now}");
                                    _recording = true;
                                    var filename = Guid.NewGuid().ToString();

                                    CreateSnapShot(filename);
                                    CreateVideoShot(filename);
                                }
                            }
                        }
                    }
                }
                catch (Exception e)
                {
                    _logger.Error("Error on _videoSource_NewFrame:\n" + e);
                    StopCamera();
                }
            }
        }
Exemplo n.º 25
0
        /// <summary>
        /// generate multiple frames of the cursor (|) based on a loop iterations
        /// </summary>
        /// <param name="writer">VideoFileWriter (open) for adding the frames</param>
        /// <param name="sentence">Sentence object with the empty and full cursor png images</param>
        /// <param name="interations">number of iterations 2 iterations equal to half a second frame</param>
        private void SetCursorBlink(VideoFileWriter writer, Sentences sentence, int interations)
        {
            var emptyCursor = sentence.CursorEmpty;
            var fullCursor  = sentence.CursorFull;

            for (int i = 0; i < interations; i++)
            {
                writer.WriteVideoFrame(LoadImageToMemory(emptyCursor.FullName));
                writer.WriteVideoFrame(LoadImageToMemory(emptyCursor.FullName));

                writer.WriteVideoFrame(LoadImageToMemory(fullCursor.FullName));
                writer.WriteVideoFrame(LoadImageToMemory(fullCursor.FullName));
            }
        }
Exemplo n.º 26
0
        // Méthode d'analyse de l'image pour trouver un mouvement
        private static void VideoSourcePlayer_NewFrame(Bitmap image)
        {
            Bitmap img_cut = SelectedZone(image, polygon);
            // récupère le niveau de mouvement
            var motionLevel = _motionDetector.ProcessFrame(img_cut);

            img_cut.Dispose();
            if (motionLevel > _motionAlarmLevel)
            {
                if (_hasMotion)
                {
                    _FileWriter.WriteVideoFrame(image);
                }
                else if (nbPicture == 0)
                {
                    _volgnr++;
                    int h = image.Height;
                    int w = image.Width;
                    Console.WriteLine(DateTime.Now + ": Motion started. Motion level: " + motionLevel);
                    _FileWriter = new VideoFileWriter();
                    // création de la vidéo motion en .av, le nombre d'image par seconde peut être réglé
                    _FileWriter.Open("/MotionsVideo/" + fileNameMovie + "_Number_" + _volgnr + ".avi", w, h, 25, VideoCodec.Default);
                    Console.WriteLine("/MotionsVideo/" + fileNameMovie + "_Number_" + _volgnr + ".avi");
                    _FileWriter.WriteVideoFrame(image);
                }
                _hasMotion = true;
                nbPicture  = 0;
            }
            else
            {
                // nombre d'image que l'on garde dans la video à la fin d'un mouvement peut être réglé.
                if (nbPicture > 200)
                {
                    Console.WriteLine(DateTime.Now + ": Motion stopped. Motion level: " + motionLevel);
                    _FileWriter.WriteVideoFrame(image);
                    _FileWriter.Close();
                    _FileWriter.Dispose();
                    nbPicture = 0;
                    // TODO : la date réelle sur la video à mettre à la place de "00"
                    XMLManager.CreateXMLMotion("/Movie/" + fileNameMovie + ".xml", _volgnr, DateTime.Now, DateTime.Now, "00", "00");
                }
                else if (_hasMotion || nbPicture >= 1)
                {
                    _FileWriter.WriteVideoFrame(image);
                    nbPicture++;
                }
                _hasMotion = false;
            }
        }
Exemplo n.º 27
0
        private void video_NewFrame_ori(object sender, NewFrameEventArgs eventArgs)
        {
            videoimg = (Bitmap)eventArgs.Frame.Clone();

            //_readWriteLock.EnterWriteLock();
            try
            {
                if (m_startrecording && FileWriter.IsOpen && videoimg != null)
                {
                    //FileWriter.WriteVideoFrame(videoimg);
                    FileWriter.WriteVideoFrame(videoimg);

                    FileWriter.Flush();
                }
                pictureBox1.Image = videoimg;
            }
            catch
            {
                Console.WriteLine("object is used somewhere else 2");
            }
            finally
            {
                //_readWriteLock.ExitWriteLock();
            }
            m_framelist.Add(videoimg);


            if (m_framelist.Count > 50)//100
            {
                m_framelist[0].Dispose();
                m_framelist.RemoveAt(0);
            }

            if (!m_startrecording && FileWriter.IsOpen)
            {
                //FileWriter.Close();

                //_readWriteLock.EnterWriteLock();
                try
                {
                    FileWriter.Close();
                    Console.WriteLine("stop recording");
                }
                finally
                {
                    //_readWriteLock.ExitWriteLock();
                }
            }
        }
Exemplo n.º 28
0
        private void videoNewFrame(object sender, NewFrameEventArgs eventArgs)
        {
            Bitmap               bitmap           = (Bitmap)eventArgs.Frame.Clone();
            Threshold            thresholdFilter  = new Threshold(120);
            Grayscale            grayscaleFilter  = new Grayscale(0.2, 0.7, 0.07);
            BrightnessCorrection brightnessFilter = new BrightnessCorrection(brightnessVal);
            ContrastCorrection   contrastFilter   = new ContrastCorrection(contrastVal);
            SaturationCorrection saturationFilter = new SaturationCorrection(saturationVal);

            bitmap = brightnessFilter.Apply((Bitmap)bitmap.Clone());
            bitmap = contrastFilter.Apply((Bitmap)bitmap.Clone());
            bitmap = saturationFilter.Apply((Bitmap)bitmap.Clone());

            if (isGray)
            {
                bitmap = grayscaleFilter.Apply((Bitmap)bitmap.Clone());
            }
            if (isBW)
            {
                bitmap = grayscaleFilter.Apply((Bitmap)bitmap.Clone());
                bitmap = thresholdFilter.Apply(bitmap);
            }

            currentFrame = (Bitmap)bitmap.Clone();
            if (fileWriter != null)
            {
                fileWriter.WriteVideoFrame((Bitmap)bitmap.Clone());
            }
        }
Exemplo n.º 29
0
        private void buttonCreateVideo_Click(object sender, EventArgs e)
        {
            int width = 858;
            int height = 480;

            VideoFileWriter writer = new VideoFileWriter();
            writer.Open("sample-video.avi", width, height, 1, VideoCodec.MPEG4, 2500000);

            Bitmap image = new Bitmap(width, height);

            using (OpenFileDialog dlg = new OpenFileDialog())
            {
                dlg.Title = "Open Image";
                dlg.Filter = "bmp files (*.bmp)|*.bmp";

                if (dlg.ShowDialog() == DialogResult.OK)
                {
                    image = new Bitmap(dlg.FileName);
                }
            }

            for (int i = 0; i < 36000; i++)
            {
                writer.WriteVideoFrame(image);
            }

            writer.Close();
            Application.Exit();
        }
Exemplo n.º 30
0
        static void Main(string[] args)
        {
            string outputFile = "test-output.wmv";
            int    width      = 320;
            int    height     = 240;

            // create instance of video writer
            VideoFileWriter writer = new VideoFileWriter();

            // create new video file
            writer.Open("test.avi", width, height, 25, VideoCodec.MPEG4);
            // create a bitmap to save into the video file
            Bitmap image = new Bitmap(width, height, PixelFormat.Format24bppRgb);

            // write 1000 video frames
            for (int i = 0; i < 1000; i++)
            {
                image.SetPixel(i % width, i % height, Color.Red);
                writer.WriteVideoFrame(image);
            }
            writer.Close();

            Console.WriteLine("Finished");
            Console.ReadKey();
        }
Exemplo n.º 31
0
        public void ShowImage(ImageEventArgs imageEventArgs)
        {
            imgCamera.Source = imageEventArgs.FrameReadyEventArgs.BitmapImage;

            //BitmapImage image = imageEventArgs.FrameReadyEventArgs.BitmapImage;

            //System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(image.PixelWidth, image.PixelHeight, System.Drawing.Imaging.PixelFormat.Format32bppPArgb);

            //System.Drawing.Imaging.BitmapData data = bmp.LockBits(
            //new System.Drawing.Rectangle(System.Drawing.Point.Empty, bmp.Size), System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppPArgb);

            //image.CopyPixels(Int32Rect.Empty, data.Scan0, data.Height * data.Stride, data.Stride); bmp.UnlockBits(data);

            MemoryStream      stream  = new MemoryStream();
            JpegBitmapEncoder encoder = new JpegBitmapEncoder();

            encoder.Frames.Add(BitmapFrame.Create((BitmapSource)imageEventArgs.FrameReadyEventArgs.BitmapImage));
            encoder.Save(stream);

            System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(stream);
            stream.Close();


            if (videoFileWriter.IsOpen)
            {
                videoFileWriter.WriteVideoFrame(bitmap);
            }
        }
    void FinalVideo_NewFrame(object sender, NewFrameEventArgs eventArgs)
    {
        System.Drawing.Image imgforms = (Bitmap)eventArgs.Frame.Clone();

        Bitmap bmp = (Bitmap)eventArgs.Frame.Clone();

        BitmapImage bi = new BitmapImage();

        bi.BeginInit();

        MemoryStream ms = new MemoryStream();

        imgforms.Save(ms, ImageFormat.Bmp);
        ms.Seek(0, SeekOrigin.Begin);

        bi.StreamSource = ms;
        bi.EndInit();

        //Using the freeze function to avoid cross thread operations
        bi.Freeze();

        //Calling the UI thread using the Dispatcher to update the 'Image' WPF control
        Dispatcher.BeginInvoke(new ThreadStart(delegate
        {
            pictureBox1.Source = bi;         /*frameholder is the name of the 'Image' WPF control*/
        }));

        for (int i = 0; i < 2; i++)
        {
            writer.WriteVideoFrame(bmp);
        }
    }
Exemplo n.º 33
0
        public void write_video_test()
        {
            var videoWriter = new VideoFileWriter();

            int width = 800;
            int height = 600;
            int framerate = 24;
            string path = Path.GetFullPath("output.avi");
            int videoBitRate = 1200 * 1000;
            //int audioBitRate = 320 * 1000;

            videoWriter.Open(path, width, height, framerate, VideoCodec.H264, videoBitRate);

            var m2i = new MatrixToImage();
            Bitmap frame;

            for (byte i = 0; i < 255; i++)
            {
                byte[,] matrix = Matrix.Create(height, width, i);
                m2i.Convert(matrix, out frame);
                videoWriter.WriteVideoFrame(frame, TimeSpan.FromSeconds(i));
            }

            videoWriter.Close();

            Assert.IsTrue(File.Exists(path));
        }
Exemplo n.º 34
0
 private static void WriteFranes(IEnumerable<string> grouping, string path, VideoFileWriter videoFileWriter, int frameRate)
 {
     int index = 0;
     var images = grouping.Select(s => Path.Combine(path, s + ImgExtentsion)).ToArray();
     foreach (var image in images){
         index++;
         using (var bitmap = new Bitmap(image)){
             var timeSpan = TimeSpan.FromSeconds((double)index/frameRate);
             videoFileWriter.WriteVideoFrame(bitmap, timeSpan);
         }
     }
     Console.WriteLine("Found " + images.Count() + " images");
 }
Exemplo n.º 35
0
        public static void CreateTimeLapse(string outputFilePath, int width, int height, int frameRate, bool orderByFileDate, string[] fileList)
        {
            try
            {
                using (var videoWriter = new VideoFileWriter())
                {
                    videoWriter.Open(outputFilePath, width, height, frameRate, VideoCodec.MPEG4, 1000000);

                    // use for ordering by file date
                    //System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(basePath);
                    //System.IO.FileSystemInfo[] images = di.GetFileSystemInfos();
                    //var orderedImages = images.OrderBy(f => f.CreationTime);

                    //foreach (FileSystemInfo imageFile in images)

                    foreach (string file in fileList)
                    {
                        // Out of Memory errors are common for incomplete or corrupted images.  Skip over them and continue.
                        try
                        {
                            using (Bitmap image = Image.FromFile(file) as Bitmap)
                            {
                                if (image != null)
                                {
                                    Bitmap bm = ResizeImage(image, width, height);
                                    videoWriter.WriteVideoFrame(bm);
                                }
                            }
                        }
                        catch
                        {
                            continue;
                        }
                    }

                    videoWriter.Close();
                }

            }
            catch (Exception)
            {

                throw;
            }

        }
Exemplo n.º 36
0
        public override void Record(object o)
        {
            var r = (RecData)o;
            String outputFilePath = r.path;

            if (File.Exists(outputFilePath))
            {
                File.Delete(outputFilePath);
            }
            rec = true;
            var vFWriter = new VideoFileWriter();

            vFWriter.Open(outputFilePath, 800, 600, 5, VideoCodec.MPEG4);

            while (rec)
            {
                if (!pause)
                {
                    Stopwatch st = new Stopwatch();
                    st.Start();
                    using (Bitmap bmpScreenCapture = new Bitmap(r.width, r.height))
                    {
                        using (Graphics g = Graphics.FromImage(bmpScreenCapture))
                        {
                            g.CopyFromScreen(r.pos,
                                             new Point(0, 0),
                                             bmpScreenCapture.Size,
                                             CopyPixelOperation.SourceCopy);
                            Rectangle cursorBounds = new Rectangle(new Point(Cursor.Position.X - r.pos.X, Cursor.Position.Y - r.pos.Y), Cursors.Default.Size);
                            Cursors.Default.Draw(g, cursorBounds);
                        }
                        vFWriter.WriteVideoFrame(ReduceBitmap(bmpScreenCapture, 800, 600));
                        st.Stop();
                        var t = st.ElapsedMilliseconds;

                        if (200 - t > 0)
                            Thread.Sleep((int)(200 - t));
                    }

                }

            }

            vFWriter.Close();
        }
Exemplo n.º 37
0
 public void test()
 {
     int width = 320;
     int height = 240;
     // create instance of video writer
     VideoFileWriter writer = new VideoFileWriter();
     // create new video file
     writer.Open("test.avi", width, height, 25, VideoCodec.MPEG4);
     // create a bitmap to save into the video file
     Bitmap image = new Bitmap(width, height, PixelFormat.Format24bppRgb);
     // write 1000 video frames
     for (int i = 0; i < 1000; i++)
     {
         image.SetPixel(i % width, i % height, Color.Red);
         writer.WriteVideoFrame(image);
     }
     writer.Close();
 }
Exemplo n.º 38
0
 static void Main(string[] args)
 {
     if (args.Length < 3)
         printHelp();
     else
     {
         var dinfo = new DirectoryInfo(args[0]);
         var files = dinfo.GetFiles(args[1]).OrderBy(p => p.Name).ToArray();
         if (files.Length > 0)
         {
             Bitmap image = (Bitmap)Image.FromFile(files[0].FullName);
             var vFWriter = new VideoFileWriter();
             vFWriter.Open(args[2], image.Width, image.Height, 50, VideoCodec.MPEG4);
             foreach (var file in files)
             {
                 Console.WriteLine(file.FullName);
                 image = (Bitmap)Image.FromFile(file.FullName);
                 vFWriter.WriteVideoFrame(image);
             }
             vFWriter.Close();
         }
     }
 }
Exemplo n.º 39
0
        private static void Create3DVideo(Cam leftCam, Cam rightCam)
        {
            if (leftCam == null) throw new ArgumentNullException("leftCam");
            if (rightCam == null) throw new ArgumentNullException("rightCam");

            string camSaveDirectory = PrepareSaveDirectory(leftCam.CamContainer);
            string videoFileName = String.Format("{0}{1} {2}.mpeg", camSaveDirectory, leftCam.CamContainer, DateTime.Now.ToString("MMM-dd-yyyy-HH-mm"));

            if (File.Exists(videoFileName))
                File.Delete(videoFileName);

            try
            {
                using (VideoFileWriter videoWriter = new VideoFileWriter())
                {
                    videoWriter.Open(videoFileName, MslCamConstants.FullDataProductWidth, MslCamConstants.FullDataProductHeight);

                    int totalImageCount = 0;
                    using (MSLScraperEntities mslContext = new MSLScraperEntities())
                    {
                        totalImageCount = (from A in
                                               (from a1 in mslContext.SolImageData where a1.Cam.Contains(leftCam.CamName) select a1)
                                           from B in
                                               (from b1 in mslContext.SolImageData where b1.Cam.Contains(rightCam.CamName) select b1)
                                           where A.Sol == B.Sol && A.TimeStamp == B.TimeStamp select A).Count();
                    }

                    int take = 15;
                    int processedCount = 0;
                    for (int skip = 0; skip < totalImageCount; skip = skip + take)
                    {
                        using (MSLScraperEntities mslContext = new MSLScraperEntities())
                        {
                            var imagesToProcess = (from A in
                                                       (from a1 in mslContext.SolImageData where a1.Cam.Contains(leftCam.CamName) select a1)
                                                   from B in
                                                       (from b1 in mslContext.SolImageData where b1.Cam.Contains(rightCam.CamName) select b1)
                                                   where A.Sol == B.Sol && A.TimeStamp == B.TimeStamp
                                                   orderby A.TimeStamp
                                                   select new { LeftCam = A, RightCam = B }).Skip(skip).Take(take);
                            
                            foreach (var imagePair in imagesToProcess)
                            {
                                using (MemoryStream msLeft = new MemoryStream(imagePair.LeftCam.ImageData))
                                using (Bitmap bitmapLeft = (Bitmap)Image.FromStream(msLeft))
                                using (MemoryStream msRight = new MemoryStream(imagePair.RightCam.ImageData))
                                using (Bitmap bitmapRight = (Bitmap)Image.FromStream(msRight))
                                {
                                    if (bitmapLeft.Width == videoWriter.Width && bitmapLeft.Height == videoWriter.Height &&
                                        bitmapRight.Width == videoWriter.Width && bitmapRight.Height == videoWriter.Height)
                                    {
                                        StereoAnaglyph filter = new StereoAnaglyph(StereoAnaglyph.Algorithm.GrayAnaglyph);
                                        filter.OverlayImage = AForge.Imaging.Image.Clone(bitmapRight, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
                                        
                                        using (Bitmap bitmap3D = filter.Apply(AForge.Imaging.Image.Clone(bitmapLeft, System.Drawing.Imaging.PixelFormat.Format24bppRgb)))
                                        using (Bitmap newBitmap = new Bitmap(bitmapLeft.Width, bitmapLeft.Height))
                                        using (Graphics g = Graphics.FromImage(newBitmap))
                                        {
                                            g.DrawImage(bitmap3D, 0, 0);
                                            g.DrawString(String.Format("{0} - Sol: {1}", leftCam.CamContainer, imagePair.LeftCam.Sol), new Font(FontFamily.GenericSansSerif, 30, FontStyle.Bold), Brushes.White, new PointF(10, 10));

                                            for (int i = 0; i < 4; i++)
                                            {
                                                videoWriter.WriteVideoFrame(newBitmap);
                                            }
                                        }
                                    }
                                }

                                processedCount++;
                                Console.Clear();
                                Console.WriteLine(string.Format("3D processing: {0} of {1} images processed for {2}", processedCount, totalImageCount, leftCam.CamContainer));
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                string errorMessage = String.Format("ERROR while creating 3D video for {0}", leftCam.CamContainer);
                Console.WriteLine(String.Format("{0}: {1}", errorMessage, ex.Message));
                errorCollection.Enqueue(new Exception(errorMessage, ex));
            }
        }
Exemplo n.º 40
0
        public string RecordingPath = "recording"; // default recording path

        private void DoRecord()
        {
            //// we set our VideoFileWriter as well as the file name, resolution and fps
            VideoFileWriter writer = new VideoFileWriter();
            string filename = String.Format("{0}\\{1}_{2:dd-MM-yyyy_hh-mm-ss}.avi",
                RecordingPath, cameraName, DateTime.Now);
            string logStr = "";
            int afr =0;

            if (cam.VideoResolution.FrameSize.Width * cam.VideoResolution.FrameSize.Height >= 1024 * 768)
            {
                afr = 10; // minimum framerate is 10?
            }
            else afr = cam.VideoResolution.AverageFrameRate;
            writer.Open(filename, cam.VideoResolution.FrameSize.Width,
                cam.VideoResolution.FrameSize.Height,
                afr,
                VideoCodec.MPEG4);  // (int)(cam.VideoResolution.AverageFrameRate / 3)
            logStr = String.Format("DoRecord({0}) with ({1},{2}) x {3}",
                filename, cam.VideoResolution.FrameSize.Width,
                cam.VideoResolution.FrameSize.Height,
                afr);
            Program.mf.log(logStr);

            // as long as we're recording
            // we dequeue the BitMaps waiting in the Queue and write them to the file
            while (IsRecording)
            {
                if (frames.Count > 0)
                {
                    Bitmap bmp = frames.Dequeue();
                    writer.WriteVideoFrame(bmp);
                    bmp.Dispose();
                }
            }
            writer.Close();
        }
Exemplo n.º 41
0
        private static void CreateVideo(Cam cam)
        {
            if (cam == null) throw new ArgumentNullException("cam");

            string camSaveDirectory = PrepareSaveDirectory(cam.CamName);
            string videoFileName = String.Format("{0}{1} {2}.mpeg", camSaveDirectory, cam.CamName.Replace(":", ""), DateTime.Now.ToString("MMM-dd-yyyy-HH-mm"));

            if (File.Exists(videoFileName))
                File.Delete(videoFileName);

            try
            {
                using (VideoFileWriter videoWriter = new VideoFileWriter())
                {
                    videoWriter.Open(videoFileName, MslCamConstants.FullDataProductWidth, MslCamConstants.FullDataProductHeight);

                    int totalImageCount = 0;
                    using (MSLScraperEntities mslContext = new MSLScraperEntities())
                    {
                        totalImageCount = mslContext.SolImageData.Count(x => x.Cam.Contains(cam.CamName));
                    }

                    int take = 30;
                    int processedCount = 0;
                    for (int skip = 0; skip < totalImageCount; skip = skip + take)
                    {
                        using (MSLScraperEntities mslContext = new MSLScraperEntities())
                        {
                            var imagesToProcess = mslContext.SolImageData.Where(x => x.Cam.Contains(cam.CamName)).OrderBy(x => x.TimeStamp).Skip(skip).Take(take);

                            foreach (SolImageData solImage in imagesToProcess)
                            {
                                using (MemoryStream ms = new MemoryStream(solImage.ImageData))
                                using (Bitmap bitmap = (Bitmap)Image.FromStream(ms))
                                {
                                    if (bitmap.Width == videoWriter.Width && bitmap.Height == videoWriter.Height)
                                    {
                                        using (Bitmap newBitmap = new Bitmap(bitmap.Width, bitmap.Height))
                                        using (Graphics g = Graphics.FromImage(newBitmap))
                                        {
                                            g.DrawImage(bitmap, 0, 0);
                                            g.DrawString(String.Format("{0} - Sol: {1}", solImage.Cam, solImage.Sol), new Font(FontFamily.GenericSansSerif, 30, FontStyle.Bold), Brushes.White, new PointF(10, 10));

                                            for (int i = 0; i < 4; i++)
                                            {
                                                videoWriter.WriteVideoFrame(newBitmap);
                                            }
                                        }
                                    }
                                }

                                processedCount++;
                                Console.Clear();
                                Console.WriteLine(string.Format("video processing: {0} of {1} images processed for {2}", processedCount, totalImageCount, cam.CamName));
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                string errorMessage = String.Format("ERROR while creating video for {0}", cam.CamName);
                Console.WriteLine(String.Format("{0}: {1}", errorMessage, ex.Message));
                errorCollection.Enqueue(new Exception(errorMessage, ex));
            }
        }
Exemplo n.º 42
0
        private void button3_Click(object sender, EventArgs e)
        {
            SaveFileDialog sfVideoKaydet = new SaveFileDialog();
            if (sfVideoKaydet.ShowDialog() != System.Windows.Forms.DialogResult.OK)
            {
                MessageBox.Show("Kayit Yeri Seçilmedi");
                return;
            }

            int width = 100;
            int height = 100;
            Image ImgOrnek = (Image.FromFile("C:\\Users\\Halil\\Desktop\\newframes\\image0.jpg") as Bitmap).Clone() as Image;
            width = ImgOrnek.Width;
            height = ImgOrnek.Height;
            ImgOrnek.Dispose();
            VideoFileWriter writer = new VideoFileWriter();
            writer.Open(sfVideoKaydet.FileName, width, height, this.Videofps, VideoCodec.MPEG4);
            yol = sfVideoKaydet.FileName;
            Bitmap image = new Bitmap(width, height, PixelFormat.Format24bppRgb);
            DirectoryInfo dir = new DirectoryInfo(fbdFramePath.SelectedPath + "\\");
            int FrameSayisi = dir.GetFiles().Length;
            for (int i = 0; i < FrameSayisi - 3; i++)
            {
                image = (Bitmap)Image.FromFile("C:\\Users\\Halil\\Desktop\\newframes\\image" + i + ".jpg");
                writer.WriteVideoFrame(image);

            }

            writer.Close();
            writer.Dispose();
            MessageBox.Show("Video Olusturuldu");
            btnGonder.Enabled = true;
        }
Exemplo n.º 43
0
        private void btn_encode_Click(object sender, EventArgs e)
        {
            if (oform != null && File.Exists(oform.FileName)) { //has a filestream been opened?
                hScrollBar1.Enabled = false;
                checkBox1.Enabled = false;
                btn_encode.Enabled = false;
                // create instance of video reader
                VideoFileReader reader = new VideoFileReader();
                VideoFileWriter writer = new VideoFileWriter();
                reader.Open(oform.FileName);
                if (checkBox1.Checked) { //Is the user requesting a AVI?
                    writer.Open(apath + "output.wmv", 320, 200, reader.FrameRate, VideoCodec.WMV2);
                }
                // print some of its attributes
                logbox.Text += "Width: " + reader.Width + "px" + Environment.NewLine;
                logbox.Text += ("Height: " + reader.Height + "px" + Environment.NewLine);
                logbox.Text += ("Fps: " + reader.FrameRate + "fps"+ Environment.NewLine);
                logbox.Text += ("Codec: " + reader.CodecName + Environment.NewLine);
                logbox.Text += ("Frames: " + reader.FrameCount + Environment.NewLine);
                //start encoding classes
                TMVVideo tvid = new TMVVideo();
                TMVEncoder tmv = new TMVEncoder();
                //tmvframe.Threshold = hScrollBar1.Value;
                Bitmap videoFrame = new Bitmap(320,200);
                logbox.Text += "Conversion started @ " + DateTime.Now.ToString();
                string logtxt = logbox.Text;
                logbox.Text += "Current Frame: 0";
                TMVFont renderfont = new TMVFont(apath + "font.bin");
                TMVFrame tframe;
                for (int i = 0; i < reader.FrameCount; i++) {
                    videoFrame = resize_image(reader.ReadVideoFrame());
                    tframe = tmv.encode(videoFrame);
                    tvid.addFrame(tframe);
                    obox.Image = tframe.renderFrame(renderfont);
                    pbar.Value = (int)((i * 100) / (reader.FrameCount-1));
                    logbox.Text = logtxt + Environment.NewLine + "Current Frame: " + i + "/" + (reader.FrameCount-1);
                    if (checkBox1.Checked) { //Is the user requesting a AVI?
                        writer.WriteVideoFrame((Bitmap)obox.Image);
                    }
                    if (closing)
                    {
                        return;
                    }
                    fbox.Image = videoFrame;
                    Application.DoEvents();
                }
                logbox.Text += Environment.NewLine + "All frames converted, attempting to interleave audio.";
                if (File.Exists(apath + "temp.wav")) { //remove any previous streams
                    File.Delete(apath + "temp.wav");
                }
                AviManager aviManager = new AviManager(oform.FileName, true);
                try { //try to read the stream
                    AudioStream waveStream = aviManager.GetWaveStream();
                    logbox.Text += Environment.NewLine + "Audio stream found:";
                    logbox.Text += Environment.NewLine + "Sample Rate: " + waveStream.CountSamplesPerSecond.ToString();
                    logbox.Text += Environment.NewLine + "Bits:" + waveStream.CountBitsPerSample.ToString();
                    logbox.Text += Environment.NewLine + "Number of Channels: " + waveStream.CountChannels.ToString();
                    File.Delete(apath + "temp.wav");
                    waveStream.ExportStream(apath+"temp.wav");
                    waveStream.Close();
                    aviManager.Close();

                    byte[] audio_data = readWav(apath + "temp.wav");

                    if (reader.FrameRate > 99) { //sometimes frame rate is stored fixed point CRUDE
                        tvid.setFPS((decimal)(reader.FrameRate / 10.0));
                        tvid.loadAudio(audio_data);
                        tvid.save();
                    }
                    else {
                        tvid.setFPS(reader.FrameRate);
                        tvid.loadAudio(audio_data);
                        tvid.save();
                    }
                }
                catch { //error somewhere here, continue silent.
                    logbox.Text += Environment.NewLine+"Error, source video does not have WAV audio, video will be silent.";

                    if (reader.FrameRate > 99) { //sometimes frame rate is stored fixed point CRUDE
                        tvid.setFPS((decimal)(reader.FrameRate / 10.0));
                        tvid.loadAudio(new Byte[reader.FrameCount]);
                        tvid.save();
                    }
                    else {
                        tvid.setFPS(reader.FrameRate);
                        tvid.loadAudio(new Byte[reader.FrameCount]);
                        tvid.save();
                    }
                }

                logbox.Text += Environment.NewLine + "Conversion finished @ " + DateTime.Now.ToString();
                writer.Close();
                reader.Close();
                hScrollBar1.Enabled = true;
                checkBox1.Enabled = true;
                btn_encode.Enabled = true;

            }
            else {
                logbox.Text += Environment.NewLine + "Error: Select a file (Using File -> Open) before attempting to encode.";
            }
        }
Exemplo n.º 44
0
        private void button1_Click_1(object sender, EventArgs e)
        {
            int width = 640;
            int height = 480;

            VideoFileWriter writer = new VideoFileWriter();
            writer.Open(myFolderName + "\\" + "test_video.avi", width, height, 25, VideoCodec.MPEG4, 1000000);

            Bitmap image = new Bitmap(width, height);
            Graphics g = Graphics.FromImage(image);
            g.FillRectangle(Brushes.Black, 0, 0, width, height);
            Brush[] brushList = new Brush[] { Brushes.Green, Brushes.Red, Brushes.Yellow, Brushes.Pink, Brushes.LimeGreen };
            Random rnd = new Random();

            for (int i = 0; i < 250; i++)
            {
                int rndTmp = rnd.Next(1, 3);
                Application.DoEvents();
                g.FillRectangle(brushList[i % 5], (i % width) * 2, (i % height) * 0.5f, i % 30, i % 30);
                g.FillRectangle(brushList[i % 5], (i % width) * 2, (i % height) * 2, i % 30, i % 30);
                g.FillRectangle(brushList[i % 5], (i % width) * 0.5f, (i % height) * 2, i % 30, i % 30);
                g.Save();
                writer.WriteVideoFrame(image);
            }

            g.DrawString("(c) 2016 - Test Video", new System.Drawing.Font("Calibri", 30), Brushes.White, 80, 240);
            g.Save();
            for (int i = 0; i < 125; i++)
            {
                writer.WriteVideoFrame(image);
            }

            writer.Close();
       
    }
Exemplo n.º 45
0
        static void Main(string[] args)
        {
            int width = 512;
            int height = width;
            int[] framerates = {60, 120, 180};

            double preamblePostamble = 0.5;    // seconds
            double movieLength = 60.0;    // seconds

            foreach (var framerate in framerates)
            {
                VideoFileWriter writer = new VideoFileWriter();
                VideoCodec codec = VideoCodec.WMV2;

                string fname = "test." + codec.ToString() + "." + framerate.ToString("000") + "Hz." + movieLength.ToString() + "sec." + width.ToString() + "." + height.ToString() + ".avi";
                writer.Open(fname, width, height, framerate, codec);

                RectangleF rectText = new RectangleF(width / 2, 0, width / 2, height);
                RectangleF rectBlock = new RectangleF(0, 0, width / 2, height);

                Bitmap bmp = new Bitmap(width, height, PixelFormat.Format24bppRgb);
                SolidBrush brushWhite = new SolidBrush(Color.White);
                SolidBrush brushBlack = new SolidBrush(Color.Black);
                var font = new Font("Tahoma", width <= 64 ? 8 : width <= 128 ? 12 : width <=256 ? 16 : 20);

                // Preamble
                for (int i = 0; i < (int)(framerate * preamblePostamble); i++)
                {
                    using (Graphics g = Graphics.FromImage(bmp))
                    {
                        g.Clear(Color.Black);
                        g.Flush();
                    }
                    writer.WriteVideoFrame(bmp);
                }

                for (int i = 0; i < (int)(framerate * movieLength); i++)
                {
                    bmp.SetPixel(i % width, i % height, Color.Blue);

                    using (Graphics g = Graphics.FromImage(bmp))
                    {
                        g.Clear(Color.Black);
                        g.SmoothingMode = SmoothingMode.AntiAlias;
                        g.InterpolationMode = InterpolationMode.HighQualityBicubic;
                        g.PixelOffsetMode = PixelOffsetMode.HighQuality;
                        g.DrawString(i.ToString(), font, Brushes.White, rectText);

                        g.FillRectangle(((i & 1) == 0) ? brushWhite : brushBlack, rectBlock);
                        g.Flush();
                    }
                    writer.WriteVideoFrame(bmp);
                }

                // Postamble
                for (int i = 0; i < (int)(framerate * preamblePostamble); i++)
                {
                    using (Graphics g = Graphics.FromImage(bmp))
                    {
                        g.Clear(Color.Black);
                        g.Flush();
                    }
                    writer.WriteVideoFrame(bmp);
                }

                writer.Close();
            }
        }
Exemplo n.º 46
0
        private void StartInternal( RecordSettings settings ) {
            try {
                _stopwatch = _stopwatch ?? new Stopwatch();
                _stopwatch.Reset();
                _stopwatch.Start();
                StopWaiter.Reset();
                if ( !Directory.Exists( settings.OutputPath ) ) Directory.CreateDirectory( settings.OutputPath );
                while ( Recording ) {
                    var outfile = Path.Combine( settings.OutputPath, DateTime.Now.ToFileTime().ToString() + ".avi" );
                    using (var outstream = new VideoFileWriter()) {
                        var sourceRect = settings.CaptureRectangle;
                        var w = sourceRect.Width;
                        var h = sourceRect.Height;

                        outstream.Open(
                            outfile,
                            w,
                            h,
                            settings.Fps,
                            settings.Codec,
                            settings.Bitrate );

                        var mpf = settings.SplitInterval * 60000 / settings.Interval;
                        using ( var bmp = new Bitmap( w, h ) ) {
                            using ( var gr = Graphics.FromImage( bmp ) ) {
                                for ( var i = 0; (mpf==null||i < mpf) && Recording; i++ ) {
                                    try {
                                        gr.CopyFromScreen( sourceRect.X, sourceRect.Y, 0, 0, sourceRect.Size );
                                        PreprocessFrame( gr, settings );
                                        gr.Flush();
                                        outstream.WriteVideoFrame( bmp );
                                        settings.OnFrameWritten?.Invoke( _stopwatch.Elapsed );
                                    }
                                    catch { }
                                    Thread.Sleep( settings.Interval );
                                }
                            }
                        }
                    }
                }
            }
            catch(Exception ex) {
                //global
            }
            finally {
                _stopwatch?.Stop();
                StopWaiter.Set();
            }
        }
Exemplo n.º 47
0
        private void CreateVideo()
        {
            // Start a new video file
            VideoFileWriter vfw = new VideoFileWriter();
            vfw.Open("Test.avi", mat.Width, mat.Height, 30, VideoCodec.Default);

            // create an image that we are going to use for the buffering of the next frame
            Bitmap bitmap = new Bitmap(mat.Width, mat.Height);
            FxMaths.Images.FxImages nextFrameImage = FxMaths.Images.FxTools.FxImages_safe_constructors(bitmap);

            // Start the simulation
            simulation.Start();

            var imTarget = imPerson * 0.1f + 0.5f;

            for (int i = 0; i < 2000; i++)
            {
                // Set to zero value
                mat.DrawMatrix(shopPlan, new FxVector2f(0, 0), new FxVector2f(mat.Width, mat.Height), FxMatrixF.DrawInterpolationMethod.Linear);
                //mat.SetValue(1); // white

                // Draw the target points
                if(true)
                    foreach(var t in targetList)
                    {
                        var size = new FxVector2f(20 * resize.x, 20 * resize.y);
                        var center = size / 2;

                        // Draw a circle per person
                        mat.DrawMatrix(imTarget,
                            imPersonMask,
                            t - center,
                            size,
                            FxMatrixF.DrawInterpolationMethod.Linear);

                    }

                lock (shop)
                {
                    var size = new FxVector2f(50 * resize.x, 50 * resize.y);
                    var center = size / 2;
                    // move the blobs in random directions
                    foreach (var person in shop.personList)
                    {
                        // Draw a circle per person
                        mat.DrawMatrix(imPerson,
                            imPersonMask,
                            person.Position - center,
                            size,
                            FxMatrixF.DrawInterpolationMethod.Linear);
                    }
                }

                // Update the bitmap that we write to image
                nextFrameImage.Load(mat, new FxMaths.Images.ColorMap(FxMaths.Images.ColorMapDefaults.Gray));
                vfw.WriteVideoFrame(bitmap);

                // Update showing image
                im.UpdateInternalImage(mat, new FxMaths.Images.ColorMap(FxMaths.Images.ColorMapDefaults.Gray));
                canvas1.ReDraw();

                if (i % 10 == 0)
                    Console.WriteLine("Write Frame:" + i.ToString());
            }

            // Stop the simulation
            simulation.Stop();
            vfw.Close();
        }
        private void captureLoop(object parameters)
        {
            dynamic p = parameters;

            //Precompute size parameters s.t. actual width/height are multiples of two and requested width/height are the window size
            Thickness borderThickness = p.BorderThickness;
            int bLeft = (int)borderThickness.Left;
            int bRight = (int)borderThickness.Right;
            int bTop = (int)borderThickness.Top;
            int bBottom = (int)borderThickness.Bottom;
            int requestedWidth = p.Width - bLeft - bRight;
            int requestedHeight = p.Height - bTop - bBottom;
            int actualWidth = requestedWidth + requestedWidth % 2; //Enforce multiple of two
            int actualHeight = requestedHeight + requestedHeight % 2; //Enforce multiple of two
            int left = p.Left;
            int top = p.Top;
            System.Drawing.Size requestedSize = new System.Drawing.Size(requestedWidth, requestedHeight);

            //Generate the render surfaces
            Bitmap requestedRenderBitmap = new Bitmap(requestedWidth, requestedHeight);
            Graphics requestedRenderGraphics = Graphics.FromImage(requestedRenderBitmap);
            Bitmap actualRenderBitmap = new Bitmap(actualWidth, actualHeight);
            Graphics actualRenderGraphics = Graphics.FromImage(actualRenderBitmap);

            //Create a timer for keeping loop time as consistent as possible
            Stopwatch loopTimer = new Stopwatch(); //Timer for timing each iteration of the loop (for convenience)
            Stopwatch fullCaptureTimer = new Stopwatch(); //Timer for timing the full capture
            int performanceCounter = 0; //Create a local variable for tracking performance in number of ms per loop interval missed
            int maxFrameRateDeviation = 0; //Create a local variable for tracking the maximum frame rate deviation
            int deviationCount = 0; //Count the number of frames which did not successfully meet their timing constraint
            int framesWritten = 0; //Count the number of frames which have been written to file

            //Create output stream
            VideoFileWriter writer = new VideoFileWriter();
            writer.Open(imageDirPath + outputFilename, actualWidth, actualHeight, frameRateScaleFactor / captureInterval, VideoCodec.MPEG4, bitRate); //Open mp4 file using multiple of two width and height

            //Start the full capture timer
            fullCaptureTimer.Start();

            //Begin capturing
            int i;
            for (i = 0; i < maxCaptureLength; i++)
            {
                loopTimer.Restart(); //Restart the timer for loop speed regulating

                //Copy the screen
                requestedRenderGraphics.CopyFromScreen(left + bLeft, top + bTop, 0, 0, requestedSize);

                //Draw the cursor on the image
                CURSORINFO pci;
                pci.cbSize = System.Runtime.InteropServices.Marshal.SizeOf(typeof(CURSORINFO));
                if (GetCursorInfo(out pci))
                {
                    if (pci.flags == CURSOR_SHOWING)
                    {
                        DrawIconEx(requestedRenderGraphics.GetHdc(),
                                    pci.ptScreenPos.x - left - bLeft - cursorOffsetLeft,
                                    pci.ptScreenPos.y - top - bTop - cursorOffsetTop,
                                    pci.hCursor,
                                    0, 0,
                                    0, IntPtr.Zero,
                                    DI_MASK | DI_IMAGE | DI_COMPAT);
                        requestedRenderGraphics.ReleaseHdc();
                    }
                }

                //Output to Video
                actualRenderGraphics.DrawImage(requestedRenderBitmap, 0, 0); //Render the graphics down to the output surface
                writer.WriteVideoFrame(actualRenderBitmap); //Write the frame to the output stream
                framesWritten++;

                p = this.Dispatcher.Invoke(new GetParameterUpdateCallback(GetParameterUpdate), null); //Update the system parameters (only position is used)
                if (p != null)
                {
                    //Update the movement variables if they're valid
                    left = p.Left;
                    top = p.Top;
                }

                loopTimer.Stop(); //Stop the timer

                //If we've gone over time, increment the performance counter by the number of ms we missed by
                int deviation = (long)captureInterval < loopTimer.ElapsedMilliseconds ?
                    (int)(loopTimer.ElapsedMilliseconds - (long)captureInterval)
                    : 0;
                if (deviation > 0) deviationCount++;
                if (deviation > maxFrameRateDeviation) maxFrameRateDeviation = deviation; //Set the new max if appropriate
                performanceCounter += deviation;

                //Computer makeup frames and duplicate write as many times as is necessary
                int expectedFrames = (int)((double)fullCaptureTimer.ElapsedMilliseconds / (double)captureInterval);
                for (int frameCount = framesWritten; framesWritten<expectedFrames; framesWritten++) //For as many times as we can subtract the frame interval from the makeup counter (meaning how many frames we missed by taking too long)
                    writer.WriteVideoFrame(actualRenderBitmap); //Write the frame to the output stream

                //Watch for shutdown condition
                if (requestThreadShutdown)
                {
                    //Stop the full capture timer to see how well we did
                    fullCaptureTimer.Stop();

                    //Exit the capture loop
                    break;
                }

                //If we're under time, sleep until it's time to start again
                Thread.Sleep((long)captureInterval > loopTimer.ElapsedMilliseconds ?
                    (int)((long)captureInterval - loopTimer.ElapsedMilliseconds)
                    : 0);
            }

            //Close the output stream
            writer.Close();

            //Reenable the form
            recordButton.Dispatcher.Invoke(new ReEnableFormCallback(ReEnableForm), null);

            //Show performance
            this.Dispatcher.Invoke(new ShowPopupCallback(ShowPopup), new object[] { "Finished with " +
                (performanceCounter / i) + "ms average framerate deviation, " + deviationCount +
                "/" + (i + 1) + " total missed frames, and " + maxFrameRateDeviation +
                "ms maximum frame deviation.\r\nFound "+framesWritten+" frames; expected "+(fullCaptureTimer.ElapsedMilliseconds/captureInterval)+".\r\n<Click to Close...>" });
        }
Exemplo n.º 49
0
            public void DoWork()
            {
                try
                {
                    if (CaptureBuffer.fps > 0)
                    {
                        writer = new VideoFileWriter();
                        writer.Open(filePath, CaptureBuffer.width, CaptureBuffer.height, CaptureBuffer.fps, VideoCodec.MPEG4, 2000000);

                        foreach (Bitmap bmp in frames)
                        {
                            writer.WriteVideoFrame(bmp);
                        }

                        // Close the writer
                        writer.Close();
                        writer = null;

                        foreach (Bitmap bmp in frames)
                        {
                            bmp.Dispose();
                        }
                        frames = null;

                        // Upload the file to the server.
                        WebClient myWebClient = new WebClient();
                        NetworkCredential myCredentials = new NetworkCredential("snijhof", "MKD7529s09");
                        myWebClient.Credentials = myCredentials;
                        byte[] responseArray = myWebClient.UploadFile("ftp://student.aii.avans.nl/GRP/42IN11EWd/Videos/" + fileName, filePath);

                        String temp = System.Text.Encoding.ASCII.GetString(responseArray);

                        // Decode and display the response.
                        Console.WriteLine("\nResponse Received.The contents of the file uploaded are:\n{0}",
                            System.Text.Encoding.ASCII.GetString(responseArray));
                    }
                }
                catch (Exception e)
                {
                    Console.Write(e.StackTrace);
                }
            }
Exemplo n.º 50
0
        static void Main(string[] args)
        {
            var parserResults = Parser.Default.ParseArguments<Options>(args);

            if (parserResults.Tag == ParserResultType.NotParsed) {
                Console.WriteLine(
                    new HelpText { AddDashesToOption = true }
                        .AddPreOptionsLine("HeatMapVideoBuilder")
                        .AddPreOptionsLine("")
                        .AddOptions(parserResults).ToString());

                return;
            }

            var options = (parserResults as Parsed<Options>).Value;

            bool hasArgumentErrors = false;
            Image backgroundImage = null;
            IList<Image> spriteImages = new List<Image>();
            IList<SizeF> halfSpriteSize = new List<SizeF>();
            Image residualSpriteImage = null;
            Point mapOrigin = Point.Empty;
            Size mapSize = Size.Empty;
            Point dataOrigin = Point.Empty;
            Size dataSize = Size.Empty;
            IList<HeatMapData> heatMapData = new List<HeatMapData>();

            try {
                backgroundImage = Bitmap.FromFile(options.Background);
            } catch (Exception e) {
                Console.Error.WriteLine("Failed to load background image \"{0}\":\n\n{1}\n\n", options.Background, e);
                hasArgumentErrors = true;
            }

            try {
                mapOrigin = string.IsNullOrWhiteSpace(options.MapOrigin) ? Point.Empty : ParsePoint(options.MapOrigin);
            } catch (Exception e) {
                Console.Error.WriteLine("Failed to parse map origin \"{0}\":\n\n{1}\n\n", options.MapOrigin, e);
                hasArgumentErrors = true;
            }

            try {
                mapSize = string.IsNullOrWhiteSpace(options.MapSize) ? new Size(backgroundImage.Size.Width - mapOrigin.X, backgroundImage.Size.Height - mapOrigin.Y) : ParseSize(options.MapSize);
            } catch (Exception e) {
                Console.Error.WriteLine("Failed to parse map size \"{0}\":\n\n{1}\n\n", options.MapSize, e);
                hasArgumentErrors = true;
            }

            try {
                dataOrigin = string.IsNullOrWhiteSpace(options.DataOrigin) ? mapOrigin : ParsePoint(options.DataOrigin);
            } catch (Exception e) {
                Console.Error.WriteLine("Failed to parse data origin \"{0}\":\n\n{1}\n\n", options.DataOrigin, e);
                hasArgumentErrors = true;
            }

            try {
                dataSize = string.IsNullOrWhiteSpace(options.DataSize) ? mapSize : ParseSize(options.DataSize);
            } catch (Exception e) {
                Console.Error.WriteLine("Failed to parse data size \"{0}\":\n\n{1}\n\n", options.DataSize, e);
                hasArgumentErrors = true;
            }

            foreach (var spriteFile in options.SpriteFiles) {
                try {
                    var sprite = Bitmap.FromFile(spriteFile);
                    spriteImages.Add(sprite);
                    halfSpriteSize.Add(new SizeF(sprite.Width / 2.0f, sprite.Height / 2.0f));
                } catch (Exception e) {
                    Console.Error.WriteLine("Failed to load heat map sprite image \"{0}\":\n\n{1}\n\n", spriteFile, e);
                    hasArgumentErrors = true;
                }
            }

            if (string.IsNullOrWhiteSpace(options.ResidualSpriteFile)) {
                residualSpriteImage = spriteImages.First();
            } else {
                try {
                    residualSpriteImage = Bitmap.FromFile(options.ResidualSpriteFile);
                } catch (Exception e) {
                    Console.Error.WriteLine("Failed to load heat map sprite image \"{0}\":\n\n{1}\n\n", options.ResidualSpriteFile, e);
                    hasArgumentErrors = true;
                }
            }

            foreach (var inputFile in options.InputFile) {
                try {
                    var json = File.ReadAllText(inputFile);
                    var currentHeatMapData = JsonConvert.DeserializeObject<HeatMapData>(json);

                    if ((currentHeatMapData.Timestamps == null)) {
                        throw new Exception("Heat map data is missing a times array. This must be an array in a root object and contain time in milliseconds.");
                    }

                    if ((currentHeatMapData.X == null)) {
                        throw new Exception("Heat map data is missing an x coordinate array. This must be an array in a root object.");
                    }

                    if ((currentHeatMapData.Y == null)) {
                        throw new Exception("Heat map data is missing an y coordinate array. This must be an array in a root object.");
                    }

                    if ((currentHeatMapData.Timestamps.Count != currentHeatMapData.X.Count) || (currentHeatMapData.Timestamps.Count != currentHeatMapData.Y.Count)) {
                        throw new Exception("Heat map data arrays are not equal length.");
                    }

                    heatMapData.Add(currentHeatMapData);
                } catch (Exception e) {
                    Console.Error.WriteLine("Failed to load heat map data from \"{0}\":\n\n{1}\n\n", options.InputFile, e);
                    hasArgumentErrors = true;
                }
            }

            if (hasArgumentErrors) {
                return;
            }

            var frameRate = 25;
            var scaledFrameRate = options.TimeScale / frameRate;
            var timeDelta = (int) (1000 * scaledFrameRate);
            var width = backgroundImage.Width;
            var height = backgroundImage.Height;
            var fullRect = new Rectangle(0, 0, width, height);
            var xScaling = mapSize.Width / (float) dataSize.Width;
            var yScaling = mapSize.Height / (float) dataSize.Height;

            var compositeImage = new Bitmap(width, height, PixelFormat.Format32bppArgb);
            var compositeImageGraphics = Graphics.FromImage(compositeImage);
            compositeImageGraphics.CompositingMode = CompositingMode.SourceOver;
            compositeImageGraphics.CompositingQuality = CompositingQuality.HighSpeed;

            var heatMapBuffer = new Bitmap(width, height, PixelFormat.Format32bppArgb);
            var heatMapBufferGraphics = Graphics.FromImage(heatMapBuffer);
            heatMapBufferGraphics.CompositingMode = CompositingMode.SourceOver;
            heatMapBufferGraphics.CompositingQuality = CompositingQuality.HighSpeed;

            var residualBuffer = new Bitmap(width, height, PixelFormat.Format32bppArgb);
            var residualBufferGraphics = Graphics.FromImage(residualBuffer);
            residualBufferGraphics.CompositingMode = CompositingMode.SourceOver;
            residualBufferGraphics.CompositingQuality = CompositingQuality.HighSpeed;

            var tempBuffer = new Bitmap(width, height, PixelFormat.Format32bppArgb);
            var tempBufferGraphics = Graphics.FromImage(tempBuffer);
            tempBufferGraphics.CompositingMode = CompositingMode.SourceOver;
            tempBufferGraphics.CompositingQuality = CompositingQuality.HighSpeed;

            var currentTime = 0;
            var currentIndices = Enumerable.Repeat(0, heatMapData.Count).ToArray();
            var heatMapDataDone = Enumerable.Repeat(false, heatMapData.Count).ToArray();

            var outputDirectory = Path.GetDirectoryName(options.OutputFile);
            if (!Directory.Exists(outputDirectory)) {
                Directory.CreateDirectory(outputDirectory);
            }

            var videoWriter = new VideoFileWriter();

            if (options.BitRate == 0) {
                videoWriter.Open(options.OutputFile, width, height, frameRate, VideoCodec.MPEG4);
            } else {
                videoWriter.Open(options.OutputFile, width, height, frameRate, VideoCodec.MPEG4, options.BitRate);
            }

            compositeImageGraphics.DrawImage(backgroundImage, Point.Empty);
            compositeImageGraphics.Save();
            videoWriter.WriteVideoFrame(compositeImage);

            var alphaFade = frameRate / options.Duration;

            var heatMapFadeMatrix = new ColorMatrix();
            heatMapFadeMatrix.Matrix33 = 0.95f;// alphaFade;

            var heatMapFadeImageAttributes = new ImageAttributes();
            heatMapFadeImageAttributes.SetColorMatrix(heatMapFadeMatrix);

            var residualFadeMatrix = new ColorMatrix();
            residualFadeMatrix.Matrix00 = 0.45f;
            residualFadeMatrix.Matrix01 = 0.45f;
            residualFadeMatrix.Matrix02 = 0.45f;
            residualFadeMatrix.Matrix10 = 0.45f;
            residualFadeMatrix.Matrix11 = 0.45f;
            residualFadeMatrix.Matrix12 = 0.45f;
            residualFadeMatrix.Matrix20 = 0.45f;
            residualFadeMatrix.Matrix21 = 0.45f;
            residualFadeMatrix.Matrix22 = 0.45f;

            var residualFadeImageAttributes = new ImageAttributes();
            residualFadeImageAttributes.SetColorMatrix(residualFadeMatrix);

            var lastTime = 0u;
            var endPadding = 8 * options.Duration * frameRate;

            var font = new Font("Consolas", 10.0f);
            var pens = new[] {
                new Pen(Color.FromArgb(unchecked((int) 0x080000FF))),
                new Pen(Color.FromArgb(unchecked((int) 0x08FF0000)))
             };
            residualBufferGraphics.CompositingMode = CompositingMode.SourceOver;

            while ((heatMapDataDone.Any(isDone => !isDone)) || (currentTime < (lastTime + endPadding))) {
                // Process the accumulation buffer.
                //tempBufferGraphics.FillRectangle(Brushes.White, 0, 0, width, height);
                //tempBufferGraphics.CompositingMode = CompositingMode.SourceCopy;
                //tempBufferGraphics.DrawImage(residualBuffer, fullRect, 0, 0, width, height, GraphicsUnit.Pixel, residualFadeImageAttributes);
                //tempBufferGraphics.Save();

                //residualBufferGraphics.FillRectangle(Brushes.Transparent, 0, 0, width, height);
                //residualBufferGraphics.CompositingMode = CompositingMode.SourceCopy;
                //residualBufferGraphics.DrawImage(tempBuffer, Point.Empty);
                //residualBufferGraphics.CompositingMode = CompositingMode.SourceOver;

                // Process the accumulation buffer.
                tempBufferGraphics.FillRectangle(Brushes.White, 0, 0, width, height);
                tempBufferGraphics.CompositingMode = CompositingMode.SourceCopy;
                tempBufferGraphics.DrawImage(heatMapBuffer, fullRect, 0, 0, width, height, GraphicsUnit.Pixel, heatMapFadeImageAttributes);
                tempBufferGraphics.Save();

                heatMapBufferGraphics.FillRectangle(Brushes.Transparent, 0, 0, width, height);
                heatMapBufferGraphics.CompositingMode = CompositingMode.SourceCopy;
                heatMapBufferGraphics.DrawImage(tempBuffer, Point.Empty);
                heatMapBufferGraphics.CompositingMode = CompositingMode.SourceOver;

                // Write the new heat map data into the heat map buffer.
                for (var i = 0; i < timeDelta; ++i) {
                    ++currentTime;

                    var heatMapIndex = 0;
                    var spriteIndex = 0;

                    foreach (var heatMapDataInstance in heatMapData) {
                        var currentIndex = currentIndices[heatMapIndex];

                        while ((currentIndex < heatMapDataInstance.Timestamps.Count) && (heatMapDataInstance.Timestamps[currentIndex] < currentTime)) {
                            lastTime = heatMapDataInstance.Timestamps[currentIndex];

                            var x = (heatMapDataInstance.X[currentIndex] - dataOrigin.X) * xScaling + mapOrigin.X;
                            var y = (heatMapDataInstance.Y[currentIndex] - dataOrigin.Y) * yScaling + mapOrigin.Y;

                            //residualBufferGraphics.DrawImage(residualSpriteImage, x, y);
                            residualBufferGraphics.DrawRectangle(pens[heatMapIndex], x -1, y -1, 3, 3);

                            x -= halfSpriteSize[spriteIndex].Width;
                            y -= -halfSpriteSize[spriteIndex].Height;
                            heatMapBufferGraphics.DrawImage(spriteImages[spriteIndex], x, y);

                            ++currentIndex;
                        }

                        currentIndices[heatMapIndex] = currentIndex;

                        if (currentIndex >= heatMapDataInstance.Timestamps.Count) {
                            heatMapDataDone[heatMapIndex] = true;
                        }

                        if (spriteIndex < spriteImages.Count - 1) {
                            ++spriteIndex;
                        }

                        ++heatMapIndex;
                    }
                }

                residualBufferGraphics.Save();
                heatMapBufferGraphics.Save();

                compositeImageGraphics.DrawImage(backgroundImage, Point.Empty);
                compositeImageGraphics.DrawImage(residualBuffer, Point.Empty);
                //compositeImageGraphics.DrawImage(heatMapBuffer, Point.Empty);

                var text = new TimeSpan(0, 0, 0, 0, currentTime).ToString(@"h\:mm\:ss");

                for (var i = -1; i <= 1; ++i) {
                    for (var j = -1; j <= 1; ++j) {
                        compositeImageGraphics.DrawString(text, font, Brushes.Black, 2 + i, 2 + j);
                    }
                }

                compositeImageGraphics.DrawString(text, font, Brushes.White, 2, 2);

                compositeImageGraphics.Save();

                videoWriter.WriteVideoFrame(compositeImage);
            }

            videoWriter.Close();
        }
Exemplo n.º 51
0
        private void Record()
        {
            _stopWrite = false;
            MainForm.RecordingThreads++;
            string previewImage = "";
            DateTime recordingStart = DateTime.MinValue;

            if (!String.IsNullOrEmpty(Camobject.recorder.trigger) && TopLevelControl != null)
            {
                string[] tid = Camobject.recorder.trigger.Split(',');
                switch (tid[0])
                {
                    case "1":
                        VolumeLevel vl = ((MainForm)TopLevelControl).GetVolumeLevel(Convert.ToInt32(tid[1]));
                        if (vl != null)
                            vl.RecordSwitch(true);
                        break;
                    case "2":
                        CameraWindow cw = ((MainForm)TopLevelControl).GetCameraWindow(Convert.ToInt32(tid[1]));
                        if (cw != null)
                            cw.RecordSwitch(true);
                        break;
                }
            }

            try {
                if (_writerBuffer != null)
                    _writerBuffer.Clear();
                _writerBuffer = new QueueWithEvents<FrameAction>();
                _writerBuffer.Changed += WriterBufferChanged;
                DateTime date = DateTime.Now;

                string filename = String.Format("{0}-{1}-{2}_{3}-{4}-{5}",
                                                date.Year, Helper.ZeroPad(date.Month), Helper.ZeroPad(date.Day),
                                                Helper.ZeroPad(date.Hour), Helper.ZeroPad(date.Minute),
                                                Helper.ZeroPad(date.Second));

                var vc = VolumeControl;
                if (vc != null && vc.Micobject.settings.active)
                {
                    vc.ForcedRecording = ForcedRecording;
                    vc.StartSaving();
                }

                VideoFileName = Camobject.id + "_" + filename;
                string folder = MainForm.Conf.MediaDirectory + "video\\" + Camobject.directory + "\\";
                string avifilename = folder + VideoFileName + CodecExtension;
                bool error = false;
                double maxAlarm = 0;

                try
                {

                    int w, h;
                    GetVideoSize(out w, out h);
                    Program.WriterMutex.WaitOne();

                    try
                    {
                        Writer = new VideoFileWriter();
                        if (vc == null || vc.AudioSource==null)
                            Writer.Open(avifilename, w, h, Camobject.recorder.crf, Codec,
                                        CalcBitRate(Camobject.recorder.quality), CodecFramerate);
                        else
                        {

                            Writer.Open(avifilename, w, h, Camobject.recorder.crf, Codec,
                                        CalcBitRate(Camobject.recorder.quality), CodecAudio, CodecFramerate,
                                        vc.AudioSource.RecordingFormat.BitsPerSample * vc.AudioSource.RecordingFormat.SampleRate * vc.AudioSource.RecordingFormat.Channels,
                                        vc.AudioSource.RecordingFormat.SampleRate, vc.AudioSource.RecordingFormat.Channels);
                        }
                    }
                    catch
                    {
                        ForcedRecording = false;
                        if (vc != null)
                        {
                            vc.ForcedRecording = false;
                            vc.StopSaving();
                        }
                        throw;
                    }
                    finally
                    {
                        Program.WriterMutex.ReleaseMutex();
                    }

                    FrameAction? peakFrame = null;

                    foreach(FrameAction fa in _videoBuffer.OrderBy(p=>p.Timestamp))
                    {
                        try
                        {
                            using (var ms = new MemoryStream(fa.Frame))
                            {
                                using (var bmp = (Bitmap)Image.FromStream(ms))
                                {
                                    if (recordingStart == DateTime.MinValue)
                                    {
                                        recordingStart = fa.Timestamp;
                                    }
                                    Writer.WriteVideoFrame(ResizeBitmap(bmp), fa.Timestamp - recordingStart);
                                }

                                if (fa.MotionLevel > maxAlarm || peakFrame == null)
                                {
                                    maxAlarm = fa.MotionLevel;
                                    peakFrame = fa;
                                }
                                _motionData.Append(String.Format(CultureInfo.InvariantCulture,
                                                                "{0:0.000}", Math.Min(fa.MotionLevel*1000, 100)));
                                _motionData.Append(",");
                                ms.Close();
                            }
                        }
                        catch (Exception ex)
                        {
                            Log.Error("",ex);//MainForm.LogExceptionToFile(ex);
                        }

                    }
                    _videoBuffer.Clear();

                    if (vc != null && vc.AudioBuffer != null)
                    {
                        foreach (VolumeLevel.AudioAction aa in vc.AudioBuffer.OrderBy(p=>p.TimeStamp))
                        {
                            unsafe
                            {
                                fixed (byte* p = aa.Decoded)
                                {
                                    if ((aa.TimeStamp - recordingStart).TotalMilliseconds>=0)
                                        Writer.WriteAudio(p, aa.Decoded.Length);
                                }
                            }
                        }
                        vc.AudioBuffer.Clear();
                    }

                    if (recordingStart == DateTime.MinValue)
                        recordingStart = DateTime.Now;

                    while (!_stopWrite)
                    {
                        while (_writerBuffer.Count > 0)
                        {
                            var fa = _writerBuffer.Dequeue();
                            try
                            {
                                using (var ms = new MemoryStream(fa.Frame))
                                {

                                    var bmp = (Bitmap) Image.FromStream(ms);
                                    Writer.WriteVideoFrame(ResizeBitmap(bmp), fa.Timestamp - recordingStart);
                                    bmp.Dispose();
                                    bmp = null;

                                    if (fa.MotionLevel > maxAlarm || peakFrame == null)
                                    {
                                        maxAlarm = fa.MotionLevel;
                                        peakFrame = fa;
                                    }
                                    _motionData.Append(String.Format(CultureInfo.InvariantCulture,
                                                                    "{0:0.000}",
                                                                    Math.Min(fa.MotionLevel*1000, 100)));
                                    _motionData.Append(",");
                                    ms.Close();
                                }
                            }
                            catch (Exception ex)
                            {
                                Log.Error("",ex);//MainForm.LogExceptionToFile(ex);
                            }
                            if (vc != null && vc.WriterBuffer != null)
                            {
                                try
                                {
                                    while (vc.WriterBuffer.Count > 0)
                                    {

                                        var b = vc.WriterBuffer.Dequeue();
                                        unsafe
                                        {
                                            fixed (byte* p = b.Decoded)
                                            {
                                                Writer.WriteAudio(p, b.Decoded.Length);
                                            }
                                        }
                                    }
                                }
                                catch
                                {
                                    //can fail if the control is switched off/removed whilst recording

                                }
                            }

                        }
                        _newRecordingFrame.WaitOne(200);
                    }

                    if (!Directory.Exists(folder + @"thumbs\"))
                        Directory.CreateDirectory(folder + @"thumbs\");

                    if (peakFrame != null)
                    {
                        using (var ms = new MemoryStream(peakFrame.Value.Frame))
                        {
                            using (var bmp = (Bitmap)Image.FromStream(ms))
                            {
                                bmp.Save(folder + @"thumbs\" + VideoFileName + "_large.jpg", MainForm.Encoder,
                                         MainForm.EncoderParams);
                                Image.GetThumbnailImageAbort myCallback = ThumbnailCallback;
                                using (var myThumbnail = bmp.GetThumbnailImage(96, 72, myCallback, IntPtr.Zero))
                                {
                                    myThumbnail.Save(folder + @"thumbs\" + VideoFileName + ".jpg", MainForm.Encoder,
                                                     MainForm.EncoderParams);
                                }
                            }
                            previewImage = folder + @"thumbs\" + VideoFileName + ".jpg";
                            ms.Close();
                        }
                    }
                }
                catch (Exception ex)
                {
                    error = true;
                    Log.Error("Camera " + Camobject.id, ex);
                }
                finally
                {
                    _stopWrite = false;
                    if (Writer != null)
                    {
                        Program.WriterMutex.WaitOne();
                        try
                        {

                            Writer.Close();
                            Writer.Dispose();
                        }
                        catch (Exception ex)
                        {
                            Log.Error("",ex);//MainForm.LogExceptionToFile(ex);
                        }
                        finally
                        {
                            Program.WriterMutex.ReleaseMutex();
                        }

                        Writer = null;
                    }

                    try
                    {
                        _writerBuffer.Clear();
                    }
                    catch
                    {
                    }

                    _writerBuffer = null;
                    _recordingTime = 0;
                    if (vc != null && vc.Micobject.settings.active)
                        VolumeControl.StopSaving();
                }
                if (error)
                {
                    try
                    {
                        FileOperations.Delete(filename + CodecExtension);
                    }
                    catch
                    {
                    }
                    MainForm.RecordingThreads--;
                    return;
                }

                string path = MainForm.Conf.MediaDirectory + "video\\" + Camobject.directory + "\\" +
                              VideoFileName;

                bool yt = Camobject.settings.youtube.autoupload && MainForm.Conf.Subscribed;

                string[] fnpath = (path + CodecExtension).Split('\\');
                string fn = fnpath[fnpath.Length - 1];
                var fpath = MainForm.Conf.MediaDirectory + "video\\" + Camobject.directory + "\\thumbs\\";
                var fi = new FileInfo(path + CodecExtension);
                var dSeconds = Convert.ToInt32((DateTime.Now - recordingStart).TotalSeconds);

                FilesFile ff = FileList.FirstOrDefault(p => p.Filename.EndsWith(fn));
                bool newfile = false;
                if (ff == null)
                {
                    ff = new FilesFile();
                    newfile = true;
                }

                ff.CreatedDateTicks = DateTime.Now.Ticks;
                ff.Filename = fn;
                ff.MaxAlarm = Math.Min(maxAlarm * 1000, 100);
                ff.SizeBytes = fi.Length;
                ff.DurationSeconds = dSeconds;
                ff.IsTimelapse = false;
                ff.AlertData = Helper.GetMotionDataPoints(_motionData);
                _motionData.Clear();
                ff.TriggerLevel = (100-Camobject.detector.minsensitivity); //adjusted

                if (newfile)
                {
                    FileList.Insert(0, ff);

                    if (!MainForm.MasterFileList.Any(p => p.Filename.EndsWith(fn)))
                    {
                        MainForm.MasterFileList.Add(new FilePreview(fn, dSeconds, Camobject.name, DateTime.Now.Ticks, 2,
                                                                    Camobject.id, ff.MaxAlarm));
                        if (TopLevelControl != null)
                        {
                            string thumb = fpath + fn.Replace(CodecExtension, ".jpg");

                            ((MainForm)TopLevelControl).AddPreviewControl(thumb, path + CodecExtension, dSeconds,
                                                                           DateTime.Now, true);
                        }
                    }

                    if (yt)
                    {
                        if (CodecExtension!=".mp4")
                            Log.Info("Skipped youtube upload (only upload mp4 files).");
                        else
                        {
                            try
                            {
                                YouTubeUploader.AddUpload(Camobject.id, fn, Camobject.settings.youtube.@public, "", "");
                            }
                            catch (Exception ex)
                            {
                                Log.Error("",ex);//MainForm.LogExceptionToFile(ex);
                            }
                        }
                    }
                }

            }
            catch (Exception ex)
            {
                Log.Error("",ex);//MainForm.LogExceptionToFile(ex);
            }
            MainForm.RecordingThreads--;
            Camobject.newrecordingcount++;

            if (!String.IsNullOrEmpty(Camobject.recorder.trigger) && TopLevelControl != null)
            {
                string[] tid = Camobject.recorder.trigger.Split(',');
                switch (tid[0])
                {
                    case "1":
                        VolumeLevel vl = ((MainForm)TopLevelControl).GetVolumeLevel(Convert.ToInt32(tid[1]));
                        if (vl != null)
                            vl.RecordSwitch(false);
                        break;
                    case "2":
                        CameraWindow cw = ((MainForm)TopLevelControl).GetCameraWindow(Convert.ToInt32(tid[1]));
                        if (cw != null)
                            cw.RecordSwitch(false);
                        break;
                }
            }

            if (Notification != null)
                Notification(this, new NotificationType("NewRecording", Camobject.name, previewImage));
        }
Exemplo n.º 52
0
        private void saveshot()
        {
            string str = Url;
            string[] sAry = str.Split('.');
            Url2 = sAry[0];

            VideoFileReader reader = new VideoFileReader();
            reader.Open(textBox1.Text);
            int co = 0;
            int end = int.Parse(reader.FrameCount.ToString());

            int countFrameCut = 0;
            VideoFileWriter writerShort = new VideoFileWriter();
            name = "..\\..\\..\\VideoName\\" + Url2 + "_" + Convert.ToString(countFrameCut) + ".avi";
            videoname = Url2 + "_" + countFrameCut + ".avi";
            writerShort.Open(name, reader.Width, reader.Height, reader.FrameRate, VideoCodec.MPEG4, 1000000);
            for (int i = 0; i < end; i++)
            {
                Bitmap videoFrame = reader.ReadVideoFrame();
                writerShort.WriteVideoFrame(videoFrame);
                videoFrame.Dispose();
                if (i == Savei[countFrameCut]) {
                    // cut short
                    writerShort.Close();

                    keyFrame();

                    if (countCutFrame != countFrameCut)
                    {
                        name = "..\\..\\..\\VideoName\\" + Url2 + "_" + Convert.ToString(countFrameCut) + ".avi";
                        videoname = Url2 + "_" + countFrameCut + ".avi";
                        writerShort.Open(name, reader.Width, reader.Height, reader.FrameRate, VideoCodec.MPEG4, 1000000);
                    }
                    countFrameCut++;
                }
            }
            writerShort.Close();
            reader.Close();

            /*
            for (int i = 0; i < Savei.Length; i++)
            {

                if (Savei[i] == 0)
                {
                    if (co == 0)
                    {
                        Savei[i] = end;
                        co = 1;
                    }
                    else
                    {

                        break;
                    }
                }

                VideoFileWriter writer = new VideoFileWriter();

                try
                {

                    name = "..\\..\\..\\VideoName\\" + Url2 + "_" + Convert.ToString(i) + ".avi";
                    videoname = Url2 + "_" + i + ".avi";
                    writer.Open(name, reader.Width, reader.Height, reader.FrameRate, VideoCodec.MPEG4, 1000000);

                    for (int j = 0; j < end; j++)
                    {
                        if (Savei[i] == j)
                        {
                            writer.Close();
                            break;
                        }
                        Bitmap videoFrame = reader.ReadVideoFrame();

                        writer.WriteVideoFrame(videoFrame);
                        videoFrame.Dispose();
                    }

                }
                catch (Exception exception)
                {
                    writer.Close();
                }

                if (i == 0)
                {
                    end = end - Savei[i];
                }
                else
                {
                    end = end - Math.Abs(Savei[i] - Savei[i - 1]);
                }

                keyFrame();

                //string constr = ConfigurationManager.ConnectionStrings["Db"].ConnectionString;
                //SqlConnection con = new SqlConnection(constr);
                //con.Open();

                //SqlCommand cmd = new SqlCommand("INSERT into CollectionShot (No,VideoName,PathVideoName,KeyFrame,HistrogrameVecter) " +
                //       " VALUES ( (Select count(*) from CollectionShot ),'" + videoname + "','" + name + "' , '" + keyF + "','" + Vechist + "')", con);
                //cmd.ExecuteNonQuery();
                //con.Close();

            }
            reader.Close();
            */
        }
Exemplo n.º 53
0
        private void Video_Player_NewFrame(object sender, ref Bitmap image)
        {
            //录像
            Graphics g = Graphics.FromImage(image);

            SolidBrush drawBrush = new SolidBrush(Color.Red);

            Font drawFont = new Font("Arial", 4, FontStyle.Italic, GraphicsUnit.Millimeter);
            int xPos = image.Width - (image.Width - 15);
            int yPos = 10;
            //写到屏幕上的时间
            drawDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");

            g.DrawString(drawDate, drawFont, drawBrush, xPos, yPos);
            if (!Directory.Exists(videoPath))
                Directory.CreateDirectory(videoPath);

            //开始录像
            if (createNewFile)
            {
                //videoFileName = DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss") + ".flv";
                videoFileName = "wuwh.flv";
                videoFileFullPath = videoPath + "/" + videoFileName;
                createNewFile = false;
                if (videoWriter != null)
                {
                    videoWriter.Close();
                    videoWriter.Dispose();
                }
                videoWriter = new VideoFileWriter();
                //这里必须是全路径,否则会默认保存到程序运行根据录下了
                videoWriter.Open(videoFileFullPath, image.Width, image.Height, frameRate, VideoCodec.FLV1);
                videoWriter.WriteVideoFrame(image);

                VideoFileSource videoFileSource = new VideoFileSource(videoFileFullPath);

            }
            else
            {
                videoWriter.WriteVideoFrame(image);
            }
        }
Exemplo n.º 54
0
        private void button1_Click(object sender, EventArgs e)
        {


            myOutputName = Path.GetFileName(myFileName) + ((videoType == 0) ? ".mp4" : ".avi");

            using (var videoWriter = new VideoFileWriter())
            {
                int maxI = 1, progrB=0;
                progrB = maxI * secs * fps;
                progressBar1.Maximum = progrB;
                progressBar1.Step = 1;
                progressBar1.Value = 0;
                toolStripStatusLabel1.Text = "Running...";

                /*
                Supported Formats:
                    Raw	        Raw (uncompressed) video.
	                MPEG2	    MPEG-2 part 2.
	                FLV1	    Flash Video (FLV) / Sorenson Spark / Sorenson H.263.
	                H263P	    H.263+ / H.263-1998 / H.263 version 2.
	                MSMPEG4v3	MPEG-4 part 2 Microsoft variant version 3.
	                MSMPEG4v2	MPEG-4 part 2 Microsoft variant version 2.
	                WMV2	    Windows Media Video 8.
	                WMV1	    Windows Media Video 7.
	                MPEG4	    MPEG-4 part 2.
	                Default	    Default video codec, which FFmpeg library selects for the specified file format.
                    missing : H264        
                */

                videoWriter.Open(myFolderName + "\\" + myOutputName, width, height, fps, ((videoType == 0) ? VideoCodec.MPEG2 : VideoCodec.MPEG4));
                //videoWriter.Open(myFolderName + "\\" + myOutputName, width, height, fps, ((videoType == 0) ? VideoCodec.H263P : VideoCodec.MPEG4));
                //Files
                //for (int i =0;i < filesFound.Count;i++)
                for (int i = 0; i < maxI; i++)
                {
                    //using (Bitmap image = Bitmap.FromFile(filesFound[i]) as Bitmap)
                    using (Bitmap image = Bitmap.FromFile(myFileName) as Bitmap)
                    {
                        if (textBoxWaterMark.Text != null)
                            myText = textBoxWaterMark.Text;
                        else
                            myText = "";
                        Bitmap imageResized = ResizeIt(image, width, height, myText);

                        //Seconds
                        for (int j = 0; j < secs; j++)
                        {
                            //Frames
                            for (int k = 0; k < fps; k++)
                            {
                                videoWriter.WriteVideoFrame(imageResized);
                                progressBar1.PerformStep();
                            }
                        }
                    }
                }
                videoWriter.Close();
                //progressBar1.Value = 0;
                toolStripStatusLabel1.Text = "Done";

            }
        }
Exemplo n.º 55
-1
        /// <summary>
        /// Method for rendering  and saving the video to a new file. All settings are set in the ProjectSettings class.
        /// </summary>
        // TODO add sound, use constructor with parameters in a factory patern
        public static void RenderVideo()
        {
            ProjectSettings settings = ProjectSettings.GetSettings();

            // TODO moove to Widget
            if (string.IsNullOrEmpty(settings.GPXPath))
            {
                throw new ArgumentNullException("No track file was selected!");
            }

            new GPXFileLoader().LoadPoints(settings.GPXPath);

            List<Widget> activeWidgets = UpdateActiveWidgets();

            VideoFileWriter writer = new VideoFileWriter();

            // open video file
            reader.Open(settings.VideoInputPath);
            VideoDimensions = new Size(reader.Width, reader.Height);
            float framerate = reader.FrameRate;

            // create new AVI file and open it
            var encoding = (VideoCodec)Enum.Parse(typeof(VideoCodec), settings.Format.ToString());

            if (string.IsNullOrEmpty(settings.VideoOutputPath))
            {
                throw new ArgumentNullException("No output video file was specified!");
            }

            writer.Open(settings.VideoOutputPath, reader.Width, reader.Height, reader.FrameRate, encoding, settings.VideoQuality * 1000000);

            videoEnd = (int)(settings.VideoEnd * reader.FrameRate);
            videoStart = (int)(settings.VideoStart * reader.FrameRate);
            if (videoEnd == 0 || videoEnd > reader.FrameCount)
            {
                videoEnd = reader.FrameCount;
            }

            int speed = settings.VideoSpeed;
            for (long currentFrameNumber = 0; currentFrameNumber < videoEnd - speed; currentFrameNumber++)
            {
                Bitmap videoFrame = GetFrame(reader, speed, ref currentFrameNumber);

                RenderFrame(currentFrameNumber / framerate, videoFrame, activeWidgets);

                writer.WriteVideoFrame(videoFrame);
                videoFrame.Dispose();
                ////string progress = string.Format("{0} {1}", (int)(100 * n / videoEnd), '%');
            }

            reader.Close();
            writer.Close();
        }