2013-01-16 272 views
0

我正在写一个程序,将一些Kinect数据呈现为小的位图(记录的手势预览\帧预览)。我有一个类将Kinect数据映射到屏幕上(X = [0; 1],Y = [0,1]);现在我想在小型位图上绘制数据并显示在我的表单上。 问题是“创建”位图...它是空的(透明)。图形不绘制位图

这是我的映射数据类:

public class MappedJointData 
{ 
    public JointType JointType { get; set; } 
    public PointF MappedPosition { get; set; } 
    public int Depth { get; set; } 
    public JointTrackingState JointTrackingState { get; set; } 
    public bool Seated { get; set; } 
} 

然后我写了一个推广类应当从数据返回位图:

public static Bitmap ToBitmap(this RecordedSkeletonFrame frame, int width, int height) 
{ 
    return DrawBonesAndJoints(frame.MappedJointData, width, height); 
} 

private static Bitmap DrawBonesAndJoints(List<MappedJointData> mappedJointData, int width, int height) 
{ 
    Bitmap b = new Bitmap(width, height); 
    using (Graphics g = Graphics.FromImage(b)) 
    { 
     g.CompositingQuality = CompositingQuality.HighQuality; 
     g.Clear(Color.Black); 

     // (...) 
     g.DrawEllipse(new Pen(drawBrush), joint.MappedPosition.X, joint.MappedPosition.Y, 3, 3); 

     // (...) 
     g.DrawLine(drawPen, joint0.MappedPosition.X, joint0.MappedPosition.Y, joint1.MappedPosition.X, joint1.MappedPosition.Y); 
    } 
    return b; 
} 

成功后记录我想通过映射数据和绘制位图:

foreach (RecordedSkeletonFrame frame in _gestureRecorder.Frames) 
{ 
    FrameImages.Add(frame.ToBitmap(100, 75)); 
} 

FrameImages是我的ObservableCollection<Bitmap>这是绑定到ListView(绑定应该工作,因为我测试它使用一些已经呈现的图像)。

为什么它不工作?我试图在网上找到一些东西,但是PPL完全像我一样。我不知道问题在哪里。即使我的渲染数据不好(但不是我设置了断点并检查了值XY),g.Clear(Color.Black);应该使我的位图变黑吗?

+0

按照MSDN,Graphics.Clear():清除整个图面并用指定的背景颜色填充它。 –

+0

在这种情况下,为什么我的位图透明?:S [编辑]顺便说一句。我尝试过'g.FillRectangle()'并且没有工作... – Nickon

+0

您的原始位图是怎样的?还......你有没有检查过你的映射数据? –

回答

0

我相信你的问题不在粘贴的代码部分。不知怎的,你会丢失/覆盖FrameImages中的数据或类似的东西。使用和图形部分应该可以工作。