2013-06-13 3 views
0

Я работаю над проектом с использованием WPF для отображения Kinect ColorImageFrame и представления скелета. Я также должен записать эти два видео.C# MemoryStream замедляет выполнение программы

Я могу отображать и записывать (используя EmguCV) эти два изображения, но у меня есть некоторые проблемы с производительностью. Похоже, что эта часть моего кода является причиной моей потери производительности.

private void DrawSkeleton(Skeleton[] skeletons) 
    { 
     using (System.Drawing.Bitmap skelBitmap = new System.Drawing.Bitmap(640, 480)) 
     { 
      foreach (Skeleton S in skeletons) 
      { 
       if (S.TrackingState == SkeletonTrackingState.Tracked) 
       { 
        DrawBonesAndJoints(S,skelBitmap);       
       } 
       else if (S.TrackingState == SkeletonTrackingState.PositionOnly) 
       { 

       } 
      } 
      _videoArraySkel.Add(ToOpenCVImage<Bgr, Byte>(skelBitmap)); 
      BitmapSource source = ToWpfBitmap(skelBitmap); 
      this.skeletonStream.Source = source;  
     }    
    } 

и более точно от ToWpfBitmap, который позволяет мне показать это в моем окне:

public static BitmapSource ToWpfBitmap(System.Drawing.Bitmap bitmap) 
    { 
     using (MemoryStream stream = new MemoryStream()) 
     { 
      bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Bmp); 
      stream.Position = 0; 
      BitmapImage result = new BitmapImage(); 
      result.BeginInit(); 
      // According to MSDN, "The default OnDemand cache option retains access to the stream until the image is needed." 
      // Force the bitmap to load right now so we can dispose the stream. 
      result.CacheOption = BitmapCacheOption.OnLoad; 
      result.StreamSource = stream; 
      result.EndInit(); 
      result.Freeze(); 
      return result; 
     } 
    } 

Потеря производительности характеризуется: - Видео, отображаемые на окне не владеет больше - Видеозапись, кажется, пропускает некоторые кадры, что приводит к тому, что видео становится быстрее/ниже обычного.

Можете ли вы мне помочь, сообщив мне, откуда эта проблема?

+0

Может быть, эта статья CodeProject о [Bitmap к BitmapSource] (http://www.codeproject.com/Articles/104929/Bitmap-to-BitmapSource) преобразование может помочь вам , Пробовали ли вы использовать метод System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap? – Dirk

+0

Я уже пытался использовать этот метод, но странно растровое изображение больше не отображается в моем окне ... –

ответ

0

Вы пытались делать запись в память в отдельном потоке, сохраняя данные в буфере, как очередь?

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

  • Нет связанных вопросов^_^