2016-08-24 11 views
0

私はキャプチャにMediaCapture APIを使用しています。しかし、私はどのようにデバイスのフォルダにではなく、アプリケーションのキャッシュに写真を保存することはできません。写真をアプリのキャッシュに保存するUWP c#

private async void btnPhoto_Click(object sender, RoutedEventArgs e) 
{ 
    // This is where we want to save to. 
    var storageFolder = KnownFolders.SavedPictures; 

    // Create the file that we're going to save the photo to. 
    var file = await storageFolder.CreateFileAsync("sample.jpg", CreationCollisionOption.GenerateUniqueName); 

    // Update the file with the contents of the photograph.   
    await _mediaCapture.CapturePhotoToStorageFileAsync(ImageEncodingProperties.CreateJpeg(), file); 
} 

ユーザーは最大5枚の写真をキャプチャしてサーバーに送信することができ、写真をデバイスに保存しないでください。どのように実装できますか?

答えて

0

しかし、デバイスのフォルダではなく、アプリのキャッシュに写真を保存する方法がわかりません。

私はあなたが一時的StorageFileを作成するためにApplicationData.TemporaryFolderを使用することをお勧め:

var file=await ApplicationData.Current.TemporaryFolder.CreateFileAsync("sample.jpg", CreationCollisionOption.GenerateUniqueName); 

これは、ディスクにキャッシュの一時ファイルを作成します。システムメンテナンスタスクは、いつでもこれらのファイルを自動的に削除します。ユーザーは、ディスククリーンアップを使用してこれらのファイルを削除することもできます。

実際にディスクにファイルを作成したくない場合は、あなたはInMemoryRandomAccessStreamを使用して写真をキャッシュすることができます

var stream = new InMemoryRandomAccessStream(); 
await _mediaCapture.CapturePhotoToStreamAsync(ImageEncodingProperties.CreateJpeg(), stream); 

それとも、あなたのアプリケーションでそれらを表示したい場合SoftwareBitmapに写真を保存します。

//save the photo to softwareBitmap: 
var lowLagCapture = await _mediaCapture.PrepareLowLagPhotoCaptureAsync(ImageEncodingProperties.CreateUncompressed(MediaPixelFormat.Bgra8)); 
var capturePhoto = await lowLagCapture.CaptureAsync(); 
SoftwareBitmap softwareBitmap = capturePhoto.Frame.SoftwareBitmap; 
await lowLagCapture.FinishAsync(); 

//load the image in image tag: 
if (softwareBitmap.BitmapPixelFormat != BitmapPixelFormat.Bgra8 || 
softwareBitmap.BitmapAlphaMode == BitmapAlphaMode.Straight) 
{ 
    softwareBitmap = SoftwareBitmap.Convert(softwareBitmap, BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied); 
} 
var source = new SoftwareBitmapSource(); 
await source.SetBitmapAsync(softwareBitmap); 
mainPageImage.Source = source;//mainPageImage is the image tag name 
関連する問題