Тема: AForge.net VideoSourcePlayer
Вітання.
Є на головній формі control VideoSourcePlayer
По натисканню кнопки "connect" показує на цьому контролі зображення з вебкамери з заданим наперед розміром.
// On "Connect" button clicked
private void connectButton_Click( object sender, EventArgs e )
{
if ( videoDevice != null )
{
if ( ( videoCapabilities != null ) && ( videoCapabilities.Length != 0 ) )
{
videoDevice.VideoResolution = videoCapabilities[videoResolutionsCombo.SelectedIndex];
}
if ( ( snapshotCapabilities != null ) && ( snapshotCapabilities.Length != 0 ) )
{
videoDevice.ProvideSnapshots = true;
videoDevice.SnapshotResolution = snapshotCapabilities[snapshotResolutionsCombo.SelectedIndex];
videoDevice.SnapshotFrame += new NewFrameEventHandler( videoDevice_SnapshotFrame );
}
EnableConnectionControls( false );
videoSourcePlayer.VideoSource = videoDevice;
videoSourcePlayer.Start( );
}
}
По натисканню кнопки на вебкамері чи на формі, роблю захват кадру, кадр в bitmap, показую іншу форму snapshotForm з pictureBox на ній, обробляю якось те зображення, щось домальовую на зображенні і виводжу на той pictureBox.
// New snapshot frame is available
private void videoDevice_SnapshotFrame( object sender, NewFrameEventArgs eventArgs )
{
ShowSnapshot( (Bitmap) eventArgs.Frame.Clone( ) );
}
private void ShowSnapshot(Bitmap snapshot)
{
if ( InvokeRequired )
{
Invoke(new Action<Bitmap>(ShowSnapshot), snapshot);
}
else
{
if ( snapshotForm == null )
{
snapshotForm = new SnapshotForm( );
snapshotForm.FormClosed += new FormClosedEventHandler( snapshotForm_FormClosed );
snapshotForm.Show( );
}
// обробляю
Bitmap Work_BMP = imageProcessing(snapshot);
// тут домальовую
//...
snapshotForm.SetImage(Work_BMP, anyVar);
}
}
Все це працює. Але потрібно позбутись форми snapshotForm. Треба щоб по натисканню кнопки "snapshot" замість відео з вебкамери на control VideoSourcePlayer вивести захоплений кадр вже оброблений і домальований як і було з додатковою формою.
Як це зробити? Чи є можливість на control VideoSourcePlayer вивести захоплений кадр як картинку і тримати її поки знову не натиснути якусь кнопку і продовжити показ відео? Чи треба просто сховати control VideoSourcePlayer, а замість нього показати вже pictureBox того ж розміру і вже туди вивести захоплений кадр?
Весь код зліпив по прикладам і ще слабо розбираюсь що до чого. Тільки почав розбиратись з цим, тому виникають подібні, можливо надто ламерскі, питання.