我正在开发 Windows Phone 应用程序,在该应用程序中,我需要将从相机捕获的图像存储在独立存储中,而不将其保存在相机胶卷中。我能够将捕获的图像存储在隔离的存储中,但捕获的图像的副本也存储在相机胶卷中。有什么办法可以将图像保存在隔离存储中而不是相机胶卷中。
谢谢
我正在开发 Windows Phone 应用程序,在该应用程序中,我需要将从相机捕获的图像存储在独立存储中,而不将其保存在相机胶卷中。我能够将捕获的图像存储在隔离的存储中,但捕获的图像的副本也存储在相机胶卷中。有什么办法可以将图像保存在隔离存储中而不是相机胶卷中。
谢谢
上面接受的答案对于 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
如果您只想保存到独立存储,则不能使用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);
}
}
}
}
从这一点开始,您就有了一个仅存储到隔离存储的功能性相机应用程序。您可能想用颜色效果或其他东西来增加它的趣味性,但这不是必需的。