2013-05-16 3 views
0

현재 IP 카메라에서 파일로 이미지를 저장해야하는 응용 프로그램에서 작업 중입니다. 비디오 스트림을 저장하고 싶지 않습니다. 저는 단지 100 밀리 초마다 이미지를 찍고 싶습니다.파일로 비트 맵 이미지 저장 문제

제조업체가 제공 한 JPEG 카메라에서 JPEG 이미지를 얻으려면 특정 URL을 사용합니다. IP 카메라에서 가져온 이미지를 BitmapImage에 저장하지만, BitmapImage를 파일에 저장하려고 할 때, 지정한 디렉토리에 빈 .jpg 파일을 저장합니다.

내가 이해하지 못하는 것은 이미지 컨트롤에 BitmapImage를 표시하려고 할 때 실제 이미지를 보여 주지만 저장할 때 빈 파일을 저장한다는 것입니다.

아무도이 문제를 해결하는 방법이나 해결책을 찾을 수있는 곳에서 조언 해 주실 수 있습니까?

저는 이미 JPEGBitmapEncoder를 시도했지만 성공하지 못했습니다. 여기

내가 현재 사용하고있는 코드입니다 :

개인 무효 captureButton_Click (개체를 보낸 사람, RoutedEventArgs e)에 { 문자열 photosLocation, newPhotos;

 photosLocation = Directory.GetCurrentDirectory() + "\\IP Cam Photos"; 
     newPhotos = Guid.NewGuid().ToString(); 
     Directory.CreateDirectory(photosLocation); 
     camLocation = photosLocation + "\\" + newPhotos; 
     Directory.CreateDirectory(camLocation); 
     captureStatusLabel.Content = "Photo capturing started!"; 
     for (int i = 0; i < 10; i++) 
     { 
      camImage = new BitmapImage(); 
      camImage.BeginInit(); 
      camImage.UriSource = new Uri("http://172.16.4.14/image?res=full&x0=0&y0=0&x1=1600&y1=1200&quality=12&doublescan=0", UriKind.RelativeOrAbsolute); 

      while (camImage.IsDownloading) 
      { 
       captureStatusLabel.Content = "Capture Busy"; 
      } 
      camImage.DownloadCompleted += camImage_DownloadCompleted; 
      camImage.EndInit(); 
      captureStatusLabel.Content = "Photo " + (i + 1) + " captured!"; 
     } 
    } 

    void camImage_DownloadCompleted(object sender, EventArgs e) 
    { 
     a++; 
     camImgLoc = camLocation + "\\Image " + a + ".jpg"; 
     FileStream camFiles = new FileStream(camImgLoc, FileMode.Create); 
     JpegBitmapEncoder camEncoder = new JpegBitmapEncoder(); 
     MessageBox.Show(camImage.IsDownloading.ToString() + "\n" + camEncoder.ToString()); 
     camEncoder.Frames.Add(BitmapFrame.Create(camImage)); 
     camEncoder.Save(camFiles); 
     camFiles.Close(); 
    } 
+5

일부 소스 코드를 표시 할 수 있습니까? –

+0

저장했을 때 이미지가 완전히 다운로드되지 않은 것처럼 들립니다. BitmapImage의 [IsDownloading] (http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapsource.isdownloading.aspx) 속성을 확인하고 저장 코드를 [DownloadCompleted ] (http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapsource.downloadcompleted.aspx) 이벤트 처리기. – Clemens

+0

DownloadCompleted 이벤트 처리기에 저장 코드를 추가했지만 여전히 잘못 저장하고 있습니다. – GANDA1F

답변

0

답변을 찾았습니다. 난 그냥 요청에 올바른 URL을 사용해야하고 그것은 완벽하게 작동합니다. public void ReceiveImage(string imageURL) { HttpWebRequest imageRequest = (HttpWebRequest)WebRequest.Create(imageURL); imageRequest.Method = "GET"; HttpWebResponse imageResponse = (HttpWebResponse)imageRequest.GetResponse(); using (Stream inputStream = imageResponse.GetResponseStream()) { using (Stream outputStream = File.OpenWrite("SonyCamera.jpg")) { byte[] buffer = new byte[4096]; int bytesRead; do { bytesRead = inputStream.Read(buffer, 0, buffer.Length); outputStream.Write(buffer, 0, bytesRead); } while (bytesRead != 0); } } }