我正在使用Kinect SDK并尝试添加颜色框架。我正在使用代码:
byte[] pixels = new byte[sensor.ColorStream.FramePixelDataLength];
WriteableBitmap image = new WriteableBitmap(sensor.ColorStream.FrameWidth, sensor.ColorStream.FrameHeight, 96, 96,
PixelFormats.Bgra32, null);
video.Source = image;
colorFrame.CopyPixelDataTo(pixels);
image.WritePixels(new Int32Rect(0, 0, image.PixelWidth, image.PixelHeight), pixels, image.PixelWidth * sizeof(int), 0);
但图像没有显示。我知道我可以连接到Kinect,因为我可以改变仰角。我究竟做错了什么?提前致谢。 注意:我正在尝试避免使用Coding4Fun
答案 0 :(得分:0)
video
是WPF图像。
private WriteableBitmap wBitmap;
private byte[] pixels;
private void WindowLoaded(...)
{
//set up kinect first, but don't start it
...
pixels = new byte[sensor.ColorStream.FramePixelDataLength];
wBitmap = new WriteableBitmap(sensor.ColorStream.FrameWidth, sensor.ColorStream.FrameHeight,
96, 96, PixelFormats.Bgra32, null);
video.Source = wBitmap;
sensor.Start();
}
private void ColorFrameReady(object sender, ColorImageFrameReadyArgs e)
{
using (ColorImageFrame colorFrame = e.OpenColorImageFrame())
{
if (colorFrame == null)
{
return;
}
colorFrame.CopyPixelDataTo(pixels);
wBitmap.WritePixels(new Int32Rect(0, 0, wBitmap.PixelWidth, wBitmap.PixelHeight),
pixels, image.PixelWidth * 4, 0);
}
}
你不应该在每一帧上创建一个新的BitmapSource,在开头创建单个WriteableBitmap并在每一帧上刷新它会好得多。
另外,之前看不到图像的原因实际上并不是因为它没有被刷新。它绝对是,但它是看不见的。您将WriteableBitmap格式设置为Bgra32,其中a
是alpha。 Kinect以Bgr32格式发送数据;没有设置alpha通道。因此,当您创建Bgra32位图时,它会看到Kinect将Alpha通道设置为0,因此图像显示为完全透明。