/// <summary> /// Загрузка видео /// </summary> private async void LoadVideoFileFunction() { try { this.video = new GreyVideo(); progressWindow = ProgressWindow.InitializeProgressWindow(); OkButtonWindow okButtonWindow = OkButtonWindow.InitializeOkButtonWindow(); OpenFileDialog dialog = new OpenFileDialog(); dialog.Filter = "MP4 Image (.mp4)|*.mp4|3gp (.3gp)|*.3gp|Avi (.avi)|*.avi"; dialog.ShowDialog(); FrameSizeWindow frameSizeWindow = FrameSizeWindow.InitializeFrameSizeWindow(); frameSizeWindow.capitalText.Text = PARAMETERS_SETTING_STRING; frameSizeWindow.ShowDialog(); FrameSizeViewModel frameSizeViewModel = (FrameSizeViewModel)frameSizeWindow.DataContext; progressWindow.capitalText.Text = LOAD_VIDEO_STRING; progressWindow.textInformation.Text = VIDEO_INITIALIZATION_STRING; progressWindow.Show(); string videoFilePath = System.IO.Path.GetDirectoryName(dialog.FileName); string videoFileName = System.IO.Path.GetFileNameWithoutExtension(dialog.FileName); string keyFramesInormatyionFilePath = System.IO.Path.Combine(videoFilePath, videoFileName + ".txt"); IOData ioData = new IOData() { FileName = dialog.FileName, FrameHeight = frameSizeViewModel.FrameHeight, FrameWidth = frameSizeViewModel.FrameWidth }; VideoLoader videoLoader = new VideoLoader(); int framesNumber = await videoLoader.CountFramesNumberAsync(ioData); progressWindow.pbStatus.SmallChange = (double)progressWindow.pbStatus.Maximum / (double)framesNumber; /// Если существует файл с информацией о ключевых кадрах if (System.IO.File.Exists(keyFramesInormatyionFilePath)) { FileReader fileReader = new FileReader(); FileReader.ExceptionOccuredEvent += this.ExceptionOccuredEventHandler; keyFrameIOInformation = await fileReader.ReadKeyFramesInformationAsync(keyFramesInormatyionFilePath, frameSizeViewModel.FrameWidth, frameSizeViewModel.FrameHeight); ioData.KeyFrameIOInformation = keyFrameIOInformation; // EdgeBasedKeyFrameExtractor.keyFrameExtractedEvent += this.KeyFramesExtractionProcessing; // EdgeBasedKeyFrameExtractor edgeBasedKeyFrameExtractor = new EdgeBasedKeyFrameExtractor(); // this.video.Frames = await edgeBasedKeyFrameExtractor.ExtractKeyFramesByListNumberAsync(ioData); } else /// Если нет, то выделяем кадры алгоритмически { EdgeBasedKeyFrameExtractor.keyFrameExtractedEvent += this.KeyFramesExtractionProcessing; EdgeBasedKeyFrameExtractor.framesDifferenceEvent += this.FramesDifferenceCalculateProcessing; EdgeBasedKeyFrameExtractor edgeBasedKeyFrameExtractor = new EdgeBasedKeyFrameExtractor(); this.video.Frames = await edgeBasedKeyFrameExtractor.ExtractKeyFramesTwoPassAsync(ioData); } okButtonWindow = OkButtonWindow.InitializeOkButtonWindow(); okButtonWindow.capitalText.Text = LOAD_VIDEO_STRING; okButtonWindow.textInformation.Text = LOAD_VIDEO_SUCCESS_STRING; okButtonWindow.ShowDialog(); progressWindow.Close(); this.VideoFileName = new Uri(dialog.FileName); this.videoFileNameString = dialog.FileName; this.MediaPlayerNavigationVisibility = Visibility.Visible; this.VideoWasNotLoaded = Visibility.Hidden; this.IsVideoFrameTabSelected = false; this.IsProcessedVideoFramesTabSelected = false; this.IsProcessedVideoFrameTabSelected = false; this.IsVideoTabSelected = true; } catch (Exception exception) { progressWindow.Hide(); ShowExceptionMessage(exception.Message); } }
/// <summary> /// Сохранение обработанного видео в виде набора ключевых кадров /// </summary> private async void SaveVideoFileFunction() { try { progressWindow = ProgressWindow.InitializeProgressWindow(); SaveFileDialog dialog = new SaveFileDialog(); dialog.ShowDialog(); string XMLFileName = System.IO.Path.Combine(dialog.FileName, System.IO.Path.GetFileNameWithoutExtension(dialog.FileName) + ".xml"); VideoSaver videoSaver = new VideoSaver(); VideoSaver.videoFrameSavedEvent += this.VideoFrameSavedProcessing; System.Drawing.Pen pen = new System.Drawing.Pen(System.Drawing.Color.Red, 2); progressWindow.pbStatus.Value = 0.0; if (this.video != null && this.video.Frames != null) progressWindow.pbStatus.SmallChange = (double)progressWindow.pbStatus.Maximum / (double)this.video.Frames.Count; progressWindow.capitalText.Text = SAVE_PROCESSED_VIDEO_FRAMES_STRING; progressWindow.textInformation.Text = ""; progressWindow.Show(); if (this.video != null && this.video.Frames != null) { await videoSaver.SaveVideoAsync(this.video, pen, dialog.FileName, "ProcessedFrames", ".jpg"); await DigitalVideoProcessingLib.IO.XMLWriter.WriteTextBlocksInformation(video, XMLFileName); } else { await videoSaver.SaveVideoAsync(this.processedVideoFramesBitmapForSave, dialog.FileName, "ProcessedFrames", ".jpg"); await DigitalVideoProcessingLib.IO.XMLWriter.WriteTextBlocksInformation(this.textRegionsDictionary, XMLFileName); } OkButtonWindow okButtonWindow = OkButtonWindow.InitializeOkButtonWindow(); okButtonWindow.capitalText.Text = SAVE_PROCESSED_VIDEO_FRAMES_STRING; okButtonWindow.textInformation.Text = SAVE_PROCESSED_VIDEO_FRAMES_SUCCESS_STRING; progressWindow.Hide(); okButtonWindow.ShowDialog(); } catch (Exception exception) { progressWindow.Hide(); ShowExceptionMessage(exception.Message); } }