2013-01-01 35 views
0

我有一个程序,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. 

为什么会发生这种情况?我使用的是与微软演示完全相同的代码,并且在那里可以正常工作。谢谢。

+4

“不保存”是什么意思?你有错误吗?在最后没有任何文件,但它似乎工作正常?当你期待派,你会得到蛋糕吗? –

+1

是否满足条件'PersonDetected && totalFrames%10 == 0 && file_name!= null && colorImage!= null'? I.e是完全执行的保存代码?使用调试器来追踪问题。 –

+0

@lc。没有文件末尾 – Kinected

回答

4

你应该使用下面的代码串组合成一个路径

colorPath = System.IO.Path.Combine(dialog.SelectedPath, "Color Images"); 

Combine方法负责添加或删除反斜杠必要的。


并且不要忘记使用调试器。您可以设置断点并检查变量并做更多事情。

调试器是你最好的朋友!


UPDATE

您也使用在文件名中无效字符。此方法替换无效字符并将一些其他修复应用于文件名

/// <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; 
} 
+0

我仍然在同一行上得到相同的错误 – Kinected

+0

路径('file_name')如何看起来完全一样? –

+0

C:\\ Users \\ Liam \\ Pictures \\ Kinect-Ed \\彩色图像\\ Kinected Image @ 2013/1/1 4:00:30 – Kinected