0

我目前正在开发一个应用程序,该应用程序必须将来自 IP 摄像机的图像存储到文件中。我不想存储视频流。我只想每隔一百毫秒左右拍一张照片。

我使用特定的 url 从制造商提供的 IP 摄像机中获取 JPEG 图像。我将从 IP 摄像机获取的图像保存在 BitmapImage 中,但是当我想将 BitmapImage 保存到文件时,它会在我指定的目录中保存一个空的 .jpg 文件。

我不明白的是,当我想在 Image 控件中显示 BitmapImage 时,它​​会显示实际图像,但是当我想保存它时,它会保存一个空文件。

谁能告诉我如何解决这个问题或者在哪里可以找到解决方案?

我已经为此尝试过 JPEGBitmapEncoder 但没有成功。

这是我目前正在使用的代码:

private void captureButton_Click(object sender, RoutedEventArgs e) { string 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();
    }
4

1 回答 1

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); } } }

于 2015-04-09T08:27:49.577 回答