2012-06-22 4 views
0

с помощью directshow.net я могу иметь возможность записывать видео и запись я делаю наложение текста для этого я настроен образец граббер и в методе buffercb я работаю на рамах здесь код ..текст наложения вопрос?

int ISampleGrabberCB.BufferCB(double SampleTime, IntPtr pBuffer, int BufferLen) 
    { 
     Graphics g; 
     String s; 
     float sLeft; 
     float sTop; 
     SizeF d; 

     g = Graphics.FromImage(bitmapOverlay); 
     g.Clear(System.Drawing.Color.Transparent); 
     g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; 

     // Prepare to put the specified string on the image 
     g.DrawRectangle(System.Drawing.Pens.Transparent, 0, 0, 240 - 1, 176 - 1); 
     g.DrawRectangle(System.Drawing.Pens.Transparent, 1, 1, 240 - 3, 176 - 3); 

     d = g.MeasureString(m_String + "\n" + DateTime.Now.ToString("G"), fontOverlay); 

     sLeft = (240 - d.Width)/2; 
     sTop = (176 - d.Height)/2; 

     g.DrawString(m_String + "\n" + DateTime.Now.ToString("G"), fontOverlay, System.Drawing.Brushes.Black, 
      sLeft, sTop, System.Drawing.StringFormat.GenericTypographic); 

     // need to flip the bitmap so it's the same orientation as the 
     // video buffer 
     bitmapOverlay.RotateFlip(RotateFlipType.RotateNoneFlipY); 

     // create and copy the video's buffer image to a bitmap 
     Bitmap v; 
     v = new Bitmap(240, 176, 1056, 
      PixelFormat.Format24bppRgb, pBuffer); 
     g = Graphics.FromImage(v); 
     g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; 
     // draw the overlay bitmap over the video's bitmap 
     g.DrawImage(bitmapOverlay, 0, 0, bitmapOverlay.Width, bitmapOverlay.Height); 
     // dispose of the various objects 
     g.Dispose(); 
     v.Dispose(); 
     // Increment frame number. Done this way, frame are zero indexed. 
     m_Count++; 
     return 0; 
    } 

Моя проблема заключается в том, что когда я запускаю программу, она показывает мне оверлей текста в окне предварительного просмотра, но когда я открываю записанный текст, наложение текста не продолжается. Думаю, что мне не хватает некоторых фреймов ... на некоторых оверлейных кадрах это их, но не продолжается. .выражение. Может ли кто-нибудь помочь?

ответ

0

ok У меня проблема!

в приведенном выше коде, BufferCB занимает слишком много времени, чтобы обработать текущие видео frame.its как пусть кадр А еще в середине процесса, прежде чем процесс полный кадр B приходит.

так, чтобы минимизировать обработку в BufferCB у меня удалить растровое изображение, где устанавливается эта строка кода я введен в функцию

g = Graphics.FromImage(bitmapOverlay); 
    g.Clear(System.Drawing.Color.Transparent); 
    g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; 

    // Prepare to put the specified string on the image 
    g.DrawRectangle(System.Drawing.Pens.Transparent, 0, 0, 240 - 1, 176 - 1); 
    g.DrawRectangle(System.Drawing.Pens.Transparent, 1, 1, 240 - 3, 176 - 3); 

    d = g.MeasureString(m_String + "\n" + DateTime.Now.ToString("G"), fontOverlay); 

    sLeft = (240 - d.Width)/2; 
    sTop = (176 - d.Height)/2; 

    g.DrawString(m_String + "\n" + DateTime.Now.ToString("G"), fontOverlay, System.Drawing.Brushes.Black, 
     sLeft, sTop, System.Drawing.StringFormat.GenericTypographic); 

    // need to flip the bitmap so it's the same orientation as the 
    // video buffer 
    bitmapOverlay.RotateFlip(RotateFlipType.RotateNoneFlipY); 

и эта функция вызывается перед media.run называется.

Смежные вопросы