Мое приложение должно записывать весь экран как видео.Для этого я установил
AForge.Video.FFMPEG
и сделал, как показано ниже.Теперь я могу записать экран.Но некоторая нижняя область и правая конечная область экрана отсутствуют.Кто-нибудь может подсказать, что вызывает проблему?Я хочу записать весь экран.
SystemInformation.VirtualScreen
используется для расчета размера экрана.это становится как 1536 * 864.Кажется, проблема в функции SetScreenArea ().
private ScreenCaptureStream _streamVideo;
private VideoFileWriter _Screenwriter;
private Rectangle _screenArea;
private bool _isScreenRecording;
private int _Screenwidth;
private int _Screenheight;
public RecordVideo()
{
InitializeComponent();
this._Screenwriter = new VideoFileWriter();
this._Screenwidth = SystemInformation.VirtualScreen.Width;
this._Screenheight = SystemInformation.VirtualScreen.Height;
this._isScreenRecording = false;
this._screenArea = Rectangle.Empty;
}
private void btn_startRecord_Click(object sender, EventArgs e)
{
try
{
if (btn_screenRecord.Text == "Record")
{
FolderBrowserDialog fbd = new FolderBrowserDialog();
if (fbd.ShowDialog() == DialogResult.OK)
{
_isScreenRecording = true;
this.StartRecScreen(fbd.SelectedPath);
}
}
else
{
_isScreenRecording = false;
btn_screenRecord.Text = "Record";
MessageBox.Show(@"Recorded !");
}
}
catch (Exception EX)
{ MessageBox.Show(EX.Message); }
}
private void StartRecScreen(string path)
{
btn_screenRecord.Text = "Stop";
this.SetScreenArea();
_isRecording = true;
string fullName = string.Format(@"{0}\{1}_{2}.mp4", path, "Record_", DateTime.Now.ToString("d_MMM_yyyy_HH_mm_ssff"));
// Save File option
_Screenwriter.Open(
fullName,
this._Screenwidth,
this._Screenheight,
10, VideoCodec.MPEG4, 1000000);
// create screen capture video source
this._streamVideo = new ScreenCaptureStream(this._screenArea);
// set NewFrame event handler
this._streamVideo.NewFrame += new NewFrameEventHandler(this.video_NewScreenFrame);
// start the video source
this._streamVideo.Start();
}
private void video_NewScreenFrame(object sender, NewFrameEventArgs eventArgs)
{
if (this._isScreenRecording)
{
this._Screenwriter.WriteVideoFrame(eventArgs.Frame);
}
else
{
_streamVideo.SignalToStop();
_Screenwriter.Close();
}
}
private void SetScreenArea()
{
// get entire desktop area size
foreach (Screen screen in Screen.AllScreens)
{
this._screenArea = Rectangle.Union(_screenArea, screen.Bounds);
}
}