2014-02-23 23 views
0

我試圖覆蓋從Kinect傳感器的視頻源的本地圖像,但是當我覆蓋圖像時,即使圖像目錄似乎是正確的,我也會得到一個DirectoryNotFoundException。是否有人解釋爲什麼我可以得到這個錯誤或如何解決它?如何解決DirectoryNotFoundException?

拋出DirectoryNotFoundException在這行代碼:

drawingContext.DrawImage(overlayImage, new Rect(12, 12, overlayImage.Width, overlayImage.Height)); 

完整方法下面正在從一個超高動力學傳感器的視頻饋送和重疊在圖像到視頻饋送。當我使用代碼繪製覆蓋圖時,該程序崩潰,但在沒有它的情況下工作正常。

void myKinect_ColorFrameReady(object sender, ColorImageFrameReadyEventArgs e) 
{ 
    using (ColorImageFrame colorFrame = e.OpenColorImageFrame()) 
    { 
     if (colorFrame == null) return; 
     byte[] colorData = new byte[colorFrame.PixelDataLength]; 
     colorFrame.CopyPixelDataTo(colorData); 
      KinectVideo.Source = BitmapSource.Create(colorFrame.Width, colorFrame.Height, 96, 96, 
      PixelFormats.Bgr32, null, colorData, colorFrame.Width * colorFrame.BytesPerPixel); 

     //drawing image overlay to video feed 
     var drawingVisual = new DrawingVisual(); 
     var drawingContext = drawingVisual.RenderOpen(); 
     drawingContext.DrawImage(BitmapSource.Create(colorFrame.Width, colorFrame.Height, 96, 96, PixelFormats.Bgr32, null, colorData, colorFrame.Width * colorFrame.BytesPerPixel), 
            new Rect(new Size(colorFrame.Width, colorFrame.Height))); 
     var overlayImage = new BitmapImage(new Uri("Images/boxbag.png", UriKind.Relative)); 

//錯誤這裏拋出 - > drawingContext.DrawImage(窗格在overlayImage,新的Rect(12,12,overlayImage.Width,overlayImage.Height)); drawingContext.Close(); var mergedImage = new RenderTargetBitmap(colorFrame.Width,colorFrame.Height,96,96,PixelFormats.Pbgra32); mergedImage.Render(drawingVisual); KinectVideo.Source = mergedImage;

 } 
} 

這是因爲在Visual Studio中顯示完整的錯誤,我從錯誤理解的是,theimage不存在的文件夾中,但沒有意義的圖像存儲在名爲Images文件夾中在項目解決方案中。

An unhandled exception of type 'System.IO.DirectoryNotFoundException' occurred in PresentationCore.dll 

Additional information: Could not find a part of the path 'C:\Users\Brian Smith\documents\visual studio 2013\Projects\KinectKickboxingBVversion1\KinectKickboxingBVversion1\bin\x86\Debug\Images\boxbag.png' 

這是根據VS到圖像的完整路徑:

C:\Users\Brian Smith\documents\visual studio 2013\Projects\KinectKickboxingBVversion1\KinectKickboxingBVversion1\Images\boxbag.png 
+2

閱讀它抱怨的路徑。您當前的目錄不是您認爲的目錄。 – SLaks

+0

我只是看着錯誤路徑和實際..在實際路徑和VS的區別是額外的'\ bin \ x86 \ Debug'。我應該如何將圖像位置改爲此路徑? –

+0

不要這樣做。您應該將圖像嵌入到應用程序中。否則,它將無法從任何其他目錄運行。 – SLaks

回答

1

嘗試此代替(可能需要調整該組件的名稱):

var overlayImage 
    = new BitmapImage(new Uri("pack://application:,,,/KinectKickboxingBVversion1;component/Images/boxbag.png")); 

更多關於Pack URIs