0

我正在开发 Windows Phone 应用程序,在该应用程序中,我需要将从相机捕获的图像存储在独立存储中,而不将其保存在相机胶卷中。我能够将捕获的图像存储在隔离的存储中,但捕获的图像的副本也存储在相机胶卷中。有什么办法可以将图像保存在隔离存储中而不是相机胶卷中。

谢谢

4

2 回答 2

2

上面接受的答案对于 Windows Phone 8 Silverlight 8.1 不正确

我使用 Completed 事件来自定义我想要在拍摄并接受照片后执行的代码。

    public MainPage()
    {

        InitializeComponent();

        cameraTask = new CameraCaptureTask();
        cameraTask.Completed += new EventHandler<PhotoResult>(cameraTask_Completed);
        cameraTask.Show();

    }

    void cameraTask_Completed(object sender, PhotoResult e)
    {
        if (e.TaskResult != TaskResult.OK) 
            return;
            // Save picture as JPEG to isolated storage.
            using (IsolatedStorageFile isStore = IsolatedStorageFile.GetUserStoreForApplication())
            {
                using (IsolatedStorageFileStream targetStream = isStore.OpenFile(fileName, FileMode.Create, FileAccess.Write))
                {
                    // Initialize the buffer for 4KB disk pages.
                    byte[] readBuffer = new byte[4096];
                    int bytesRead = -1;

                    // Copy the image to isolated storage. 
                    while ((bytesRead = e.ImageStream.Read(readBuffer, 0, readBuffer.Length)) > 0)
                    {
                        targetStream.Write(readBuffer, 0, bytesRead);
                    }
                }
            }

    }

资源 http://msdn.microsoft.com/library/windowsphone/develop/microsoft.phone.tasks.cameracapturetask http://code.msdn.microsoft.com/wpapps/CSWP8ImageFromIsolatedStora-8dcf8411

于 2014-06-12T07:02:26.107 回答
1

如果您只想保存到独立存储,则不能使用CameraCaptureTask. 在 WP8 中,无论您做什么,它都会透明地将图像的副本保存到相机胶卷中。

也就是说,有一个解决方案。您需要使用相机 API 来创建和使用您自己的CameraCaptureTask. 我不会深入探讨,但这应该可以帮助您入门。

您需要做的第一件事是按照本教程创建视图和基本应用程序。他们使用该cam_CaptureImageAvailable方法将图像存储到相机胶卷中。您需要修改它以将其存储在隔离存储中,如下所示:

using (e.ImageStream)
{
   using(IsolatedStorageFile storageFile = IsolatedStorageFile.GetuserStoreForApplication())
   {
      if( !sotrageFile.DirectoryExists(<imageDirectory>)
      {
         storageFile.CreateDirectory(<imageDirectory>);
      }

      using( IsolatedStorageFileStream targetStream = storageFile.OpenFile( <filename+path>, FileMode.Create, FileAccess.Write))
      {
         byte[] readBuffer = new byte[4096];
         int bytesRead;
         while( (bytesRead = e.ImageStream.Read( readBuffer, 0, readBuffer.Length)) > 0)
         {
            targetStream.Write(readBuffer, 0, bytesRead);
         }
      }
   }
}

从这一点开始,您就有了一个仅存储到隔离存储的功能性相机应用程序。您可能想用颜色效果或其他东西来增加它的趣味性,但这不是必需的。

于 2013-08-08T11:52:39.570 回答