我尝试使用PngBitmapEncoder将颜色和深度数据保存为PNG分隔文件,但保存的深度帧比颜色少得多。
如果我用JpegBitmapEncoder将颜色保存为Jpeg,使用PngBitmapEncoder将深度保存为PNG,我从两个流中获得相同数量的帧。
任何人都可以解释我为什么吗?
private void myKinectSensor_ColorFrameReady(object sender, ColorImageFrameReadyEventArgs e)
{
using (ColorImageFrame color = e.OpenColorImageFrame())
{
if (color != null)
{
colorbits = new byte[color.PixelDataLength];
color.CopyPixelDataTo(colorbits);
PngBitmapEncoder enc = new PngBitmapEncoder();
enc.Frames.Add(BitmapFrame.Create(BitmapSource.Create(color.Width, color.Height, 96, 96, PixelFormats.Bgr32, null, colorbits, color.Width * color.BytesPerPixel)));
if (StartSavingFrames)
{
string temppath = System.IO.Path.Combine(@"../output/kinect1/color/", colorcnt.ToString() + ".png");
FileStream fs = new FileStream(temppath, FileMode.Create);
enc.Save(fs);
fs.Close();
fs = null;
colorcnt++;
}
else { colorcnt = 0; }
}
}
}
private void myKinectSensor_DepthFrameReady(object sender, DepthImageFrameReadyEventArgs e)
{
using (DepthImageFrame depth = e.OpenDepthImageFrame())
{
if (depth != null)
{
frame = new short[depth.PixelDataLength];
depth.CopyPixelDataTo(frame);
for (int i = 0; i < depth.PixelDataLength; i++)
{
frame[i] = (short)(((ushort)frame[i]) >> 3);
}
PngBitmapEncoder enc = new PngBitmapEncoder();
enc.Frames.Add(BitmapFrame.Create(BitmapSource.Create(depth.Width, depth.Height, 96, 96, PixelFormats.Gray16, null, frame, depth.Width * depth.BytesPerPixel)));
if (StartSavingFrames)
{
string temppath = System.IO.Path.Combine(@"../output/kinect1/depth/", cnt.ToString() + ".png");
FileStream fs = new FileStream(temppath, FileMode.Create);
enc.Save(fs);
fs.Close();
fs = null;
cnt++;
}
else { cnt = 0; }
}
}
}
日Thnx