我有一个程序,其中Kinect获取图像并将其保存到用户指定的位置。我知道程序找到了正确的文件夹,因为它创建了更多文件夹来保存不同类型的图像,并且将创建这些文件夹。我保存图像的当前代码(如下)适用于其他程序,所以有一些参数可以阻止它我不知道吗?提前谢谢。
保存图片
using (ColorImageFrame colorFrame = e.OpenColorImageFrame())
{
if (colorFrame == null)
{
return;
}
byte[] pixels = new byte[sensor.ColorStream.FramePixelDataLength];
//WriteableBitmap image = new WriteableBitmap(
// sensor.ColorStream.FrameWidth,
// sensor.ColorStream.FrameHeight, 96, 96,
// PixelFormats.Bgra32, null);
colorFrame.CopyPixelDataTo(pixels);
colorImage.WritePixels(new Int32Rect(0, 0, colorImage.PixelWidth,
colorImage.PixelHeight),
pixels, colorImage.PixelWidth * 4, 0);
//BitmapSource image = BitmapSource.Create(colorFrame.Width, colorFrame.Height,
// 96, 96, PixelFormats.Bgr32, null,
// pixels, colorFrame.Width * 4);
//image.WritePixels(new Int32Rect(0, 0, image.PixelWidth, image.PixelHeight),
// pixels, image.PixelWidth * sizeof(int), 0);
//video.Source = image;
totalFrames++;
BitmapEncoder encoder = new JpegBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(colorImage));
//path = System.IO.Path.Combine("C:/", "Kinected", "Images");
if (PersonDetected == true)
{
if (totalFrames % 10 == 0)
{
if (file_name != null && colorImage != null)
{
try
{
using (FileStream fs = new FileStream(colorPath +
@"\Kinected Image " + time + ".jpg", FileMode.Create))
{
encoder.Save(fs);
}
}
catch (IOException)
{
System.Windows.MessageBox.Show("Save Failed");
}
}
}
skeletonDeLbl.Content = "Skeleton Detected!";
}
if (PersonDetected == false) skeletonDeLbl.Content = "No Skeleton Detected.";
}
确定路径
FolderBrowserDialog dialog = new FolderBrowserDialog();
dialog.Description =
"Select which folder you want Kinected to keep all of its information/images in.";
DialogResult result = dialog.ShowDialog();
colorPath = dialog.SelectedPath + @"\Color Images";
depthPath = dialog.SelectedPath + @"\Depth Images";
facePath = dialog.SelectedPath + @"\Face Data";
if (!Directory.Exists(colorPath))
Directory.CreateDirectory(colorPath);
if (!Directory.Exists(depthPath))
Directory.CreateDirectory(depthPath);
if (!Directory.Exists(facePath))
Directory.CreateDirectory(facePath);
System.Windows.MessageBox.Show(colorPath);
修改
结果显示file_name
只是空,但现在我收到错误,当它到达using (FileStream fs = new FilesStream(file_name, FileMode.Create))
行时,它说:
An unhandled exception of type 'System.NotSupportedException' occurred in mscorlib.dll
Additional information: The given path's format is not supported.
为什么会这样?我使用与Microsoft的演示完全相同的代码,它在那里工作正常。感谢。
答案 0 :(得分:4)
您应该使用以下代码将字符串组合成路径
colorPath = System.IO.Path.Combine(dialog.SelectedPath, "Color Images");
Combine
方法负责在必要时添加或删除反斜杠。
不要忘记使用调试器。您可以设置断点并检查变量并执行更多操作。
调试器是你最好的朋友!
<强>更新强>
您还在文件名中使用了无效字符。此方法替换无效字符,并对文件名
也应用其他一些修复/// <summary>
/// Replaces invalid characters in a file name by " ". Apply only to the filename.ext
/// part, not to the path part.
/// </summary>
/// <param name="fileName">A file name (not containing the path part) possibly
/// containing invalid characters.</param>
/// <returns>A valid file name.</returns>
public static string GetValidFileName(string fileName)
{
string invalidChars = Regex.Escape(new string(Path.GetInvalidFileNameChars()));
string s = Regex.Replace(fileName, "[" + invalidChars + "]", " ");
s = Regex.Replace(s, @"\s\s+", " "); // Replace multiple spaces by one space.
string fil = Path.GetFileNameWithoutExtension(s).Trim().Trim('.');
string ext = Path.GetExtension(s).Trim().Trim('.');
if (ext != "") {
fil += "." + ext;
}
fil = fil.Replace(" .", ".");
return fil == "." ? "" : fil;
}