Kinect ColorImageFrame とスケルトン表現を表示するために WPF を使用するプロジェクトに取り組んでいます。また、その 2 つのビデオを録画する必要があります。
これら 2 つの画像を (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;
}
}
パフォーマンスの低下の特徴は次のとおりです。 - ウィンドウに表示されるビデオが流暢ではなくなりました。
この問題の原因を教えてください。