Click here to Skip to main content
11,713,845 members (86,309 online)
Rate this: bad
good
Please Sign up or sign in to vote.
See more: C# Video
need help on an C# application that draws basic shapes over video even when it plays. I am using AXWindowsMediaPlayer control for playing video and also put a custom Panel to draw shapes over player control. Custom panel is transparent. can draw smoothly while video is not playing. But when it plays every thing goes wrong. the drawing over the video get erased. How i can overcome the issue ? Please help.
Posted 29-Nov-12 1:44am
Akeeq536
Edited 29-Nov-12 2:36am
RyanDev168.7K
v2
Comments
Akeeq at 3-Dec-12 0:42am
   
how to add a glass layer over video player to draw on it ?
anything possible if do stuff in wpf. tried but same problem
Rate this: bad
good
Please Sign up or sign in to vote.

Solution 1

i have found how to do this.
here is one way in WPF using Canvas
    private void buttonPlayVideo_Click(object sender, RoutedEventArgs e)
    {
        Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
        dlg.Filter = "All Files|*.*";
        Nullable<bool> result = dlg.ShowDialog();
        if (result == true) {
            MediaPlayer mp = new MediaPlayer();
            mp.Open(new Uri(filename));
            VideoDrawing vd = new VideoDrawing();
            vd.Player = mp;
            vd.Rect = new Rect(0, 0, 960, 540);
            DrawingBrush db = new DrawingBrush(vd);
            canvas.Background = db;
            mp.Play();
        }
    }
</bool>
then create mouse events for Canvas and draw with it
Point startPoint, endPoint;
private void canvas_MouseDown(object sender, MouseButtonEventArgs e)
{
    startPoint = e.GetPosition(canvas);
}
private void canvas_MouseUp(object sender, MouseButtonEventArgs e)
{
    endPoint = e.GetPosition(canvas);
 
    Line myLine = new Line();
    myLine.Stroke = System.Windows.Media.Brushes.LightSteelBlue;
    myLine.X1 = startPoint.X;
    myLine.Y1 = startPoint.Y;
    myLine.X2 = endPoint.X;
    myLine.Y2 = endPoint.Y;
    myLine.HorizontalAlignment = HorizontalAlignment.Left;
    myLine.VerticalAlignment = VerticalAlignment.Center;
    myLine.StrokeThickness = 2;
    canvas.Children.Add(myLine);
}
  Permalink  
Rate this: bad
good
Please Sign up or sign in to vote.

Solution 2

You can't draw manually on active movie window which is used in playback. This is better organized with implementing custom video presenting stuff if you need to do that while preview, or inside DirectShow filter for any cases. Fair easy way but not proper is to make callback via ISampleGrabber and pick up the video images which you can draw along with your stuff.

Maxim.
  Permalink  

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

  Print Answers RSS
0 Sergey Alexandrovich Kryukov 370
1 CHill60 250
2 Maciej Los 229
3 Richard MacCutchan 210
4 OriginalGriff 175
0 Sergey Alexandrovich Kryukov 365
1 CHill60 335
2 OriginalGriff 245
3 Andy Lanng 173
4 Richard MacCutchan 150


Advertise | Privacy | Mobile
Web03 | 2.8.150819.1 | Last Updated 6 Dec 2012
Copyright © CodeProject, 1999-2015
All Rights Reserved. Terms of Service
Layout: fixed | fluid

CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100