예제 #1
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();
        }
예제 #2
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;
                    }
                }
            }
        }
        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();
                }
            }
        }
예제 #4
0
 public void StopRecording()
 {
     captureDevice.NewFrame -= CaptureDevice_NewFrame;
     writerSet = false;
     captureDevice.SignalToStop();
     fileWriter.Flush();
 }
예제 #5
0
        // Closes the video source
        public void CloseVideoSource()
        {
            // If the video source player exists and is running
            if (videoSourcePlayer != null && videoSourcePlayer.IsRunning)
            {
                // Stop the source and set the object to null
                videoSourcePlayer.Stop();
                if (videoSourcePlayer.VideoSource != null)
                {
                    if (videoSourcePlayer.VideoSource.IsRunning)
                    {
                        videoSourcePlayer.VideoSource.Stop();
                        videoSourcePlayer.VideoSource.WaitForStop();
                    }

                    videoSourcePlayer.VideoSource = null;
                }
            }

            // If the video writer isn't null, flush its output and close it
            if (vwriter != null && vwriter.IsOpen)
            {
                vwriter.Flush();
                vwriter.Close();
            }
        }
예제 #6
0
        void _updateGuiTimer_Tick(object sender, EventArgs e)
        {
            m_second += m_timerinterval;
            if (IsSrc1Dirty && _cam1 != null)
            {
                // a refresh is needed of source 1
                try
                {
                    // always lock image data to prevent accessing of the image from other threads.
                    _cam1.GetImage().EnterLock();
                    pictureBoxSource1.Image = _cam1.GetImage().Image;
                    videoimg = (Bitmap)_cam1.GetImage().Image;

                    //byte[] arr = GetBytesOfImage(videoimg);

                    // save image to file
                    if (m_startrecording && FileWriter.IsOpen)
                    {
                        FileWriter.WriteVideoFrame(videoimg, TimeSpan.FromMilliseconds(m_second));
                        FileWriter.Flush();
                    }
                }
                catch (Exception)
                {
                }
                finally
                {
                    // We are done with the image data object, release.
                    _cam1.GetImage().ExitLock();
                    IsSrc1Dirty = false;
                }
            }
        }
예제 #7
0
        private void video_NewFrame_2nd(object sender, NewFrameEventArgs eventArgs)
        {
            if (m_duplicate)
            {
                videoimg = (Bitmap)eventArgs.Frame.Clone();

                m_framelist.Add(videoimg);
                if (m_framelist.Count > 100)
                {
                    m_framelist[0].Dispose();
                    m_framelist.RemoveAt(0);
                }
            }
            else
            {
                Bitmap t_frame = videoimg;

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

                if (t_frame != null)
                {
                    t_frame.Dispose();
                }
            }


            //pictureBox1.Image = (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;
            }
            catch
            {
                Console.WriteLine("object is used somewhere else");
            }
        }
예제 #8
0
        private void video_NewFrame(object sender, NewFrameEventArgs eventArgs)
        {
            videoimg = (Bitmap)eventArgs.Frame.Clone();
            //do processing here
            pictureBox1.Image = (Bitmap)eventArgs.Frame.Clone();

            // save image to file
            if (m_startrecording)
            {
                FileWriter.WriteVideoFrame(videoimg);
                FileWriter.Flush();
            }
        }
예제 #9
0
        private static void CreateMovies(Bitmap[] movieFrames, int resolution, string outDirectory, int offset, DateTime startTime)
        {
            string outDir = Path.Combine(outDirectory,
                                         resolution.ToString(),
                                         offset.ToString(),

                                         startTime.Year.ToString(),
                                         startTime.Month.ToString(),
                                         startTime.Day.ToString(),
                                         startTime.Hour.ToString(),
                                         startTime.Minute.ToString(),
                                         startTime.Second.ToString(),

                                         "SDO_AIA_171");

            if (!Directory.Exists(outDir))
            {
                Directory.CreateDirectory(outDir);
            }

            int slizes = resolution / MOVIE_WIDTH;

            for (int x = 0; x < slizes; x++)
            {
                for (int y = 0; y < slizes; y++)
                {
                    // ToDo: DAte info also as folder Hierarchy?
                    using (VideoFileWriter video = new VideoFileWriter())
                    {
                        video.Open(Path.Combine(outDir, $"{startTime.ToString("FF")}__{x}_{y}.mp4"), MOVIE_WIDTH, MOVIE_WIDTH, 32, VideoCodec.H264, 1024 * 1024);
                        Rectangle region = new Rectangle(x * MOVIE_WIDTH, y * MOVIE_WIDTH, MOVIE_WIDTH, MOVIE_WIDTH);

                        for (int i = 0; i < movieFrames.Length; i++)
                        {
                            using (Bitmap frame = movieFrames[i].Clone(region, movieFrames[i].PixelFormat))
                            {
                                //Console.Write(i + ",");
                                video.WriteVideoFrame(frame);
                            }
                        }
                        //Console.WriteLine();

                        video.Flush();
                    }
                }
            }
        }
예제 #10
0
        private void timer1_Tick(object sender, EventArgs e)
        {
            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();
                    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);

                        //videoimg = (Bitmap)_cam1.GetImage().Image;
                        videoimg = (Bitmap)pictureBoxSource1.Image.Clone();
                        FileWriter.WriteVideoFrame(videoimg, frameOffset);
                        //Console.Write("timespan"+m_second);
                        //FileWriter.WriteVideoFrame(videoimg);
                        FileWriter.Flush();

                        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;
                }
            }
        }
예제 #11
0
 private void video_NewFrame(object sender, NewFrameEventArgs eventArgs)
 {
     videoimg = (Bitmap)eventArgs.Frame.Clone();
     //do processing here
     try
     {
         pictureBox1.Image = (Bitmap)eventArgs.Frame.Clone();
         // save image to file
         if (m_startrecording && FileWriter.IsOpen)
         {
             FileWriter.WriteVideoFrame(videoimg);
             FileWriter.Flush();
         }
     }
     catch
     {
         Console.WriteLine("object is used somewhere else");
     }
 }
예제 #12
0
        public static void Run(string videoPath, string videoName)
        {
            var reader = new VideoFileReader();

            reader.Open(videoPath + videoName);
            var writer         = new VideoFileWriter();
            var numberOfFrames = (int)reader.FrameCount;
            var probeBitmap    = new FastBitmap(reader.ReadVideoFrame(0));

            probeBitmap.LockBits();
            var maxValues = CalcMaxValues(probeBitmap.Width, probeBitmap.Height);
            var maxX      = maxValues.Item1;
            var maxY      = maxValues.Item2;

            //Console.WriteLine($"{maxX}:{maxY}");
            writer.Height     = probeBitmap.Height;
            writer.Width      = probeBitmap.Width;
            writer.FrameRate  = 30;
            writer.VideoCodec = VideoCodec.Mpeg4;
            writer.BitRate    = reader.BitRate;
            writer.Open(videoPath + "out.avi");
            for (var t = 70; t < numberOfFrames; t++)
            {
                var        convertedBitmap = new FastBitmap(new Bitmap(probeBitmap.Width, probeBitmap.Height));
                FastBitmap currentBitmap;
                try
                {
                    currentBitmap = new FastBitmap(reader.ReadVideoFrame(t));
                }
                catch (Exception ignored)
                {
                    break;
                }
                convertedBitmap.LockBits();
                currentBitmap.LockBits();
                for (var x = 0; x < probeBitmap.Width; x++)
                {
                    for (var y = 0; y < probeBitmap.Height; y++)
                    {
                        var pixel = ConvertToPolar(x - probeBitmap.Width / 2, y - probeBitmap.Height / 2);
                        var convX = FastUtils.FastAbs((int)(pixel.Item2 / maxY * (probeBitmap.Width - 1)));
                        var convY = FastUtils.FastAbs((int)(pixel.Item1 / maxX * (probeBitmap.Height - 1)));
                        convertedBitmap.SetPixel(convX, convY, currentBitmap.GetPixel(x, y));
                    }
                }
                Stopwatch sw = new Stopwatch();
                sw.Start();
                for (int i = 0; i < 4; i++)
                {
                    convertedBitmap = CompleteBitmap(convertedBitmap);
                }
                sw.Stop();
                Console.WriteLine(sw.Elapsed);
                currentBitmap.UnlockBits();
                currentBitmap.DisposeSource();
                convertedBitmap.GetSource().Save(videoPath + "test.png");
                break;
                //convertedBitmap.RotateFlip(RotateFlipType.RotateNoneFlipX);
                writer.WriteVideoFrame(convertedBitmap.GetSource());
                convertedBitmap.DisposeSource();
            }
            probeBitmap.UnlockBits();
            writer.Flush();
        }