2016-08-24 3 views
0

Я использую API MediaCapture для захвата. Но я не знаю, как сохранить фотографии в кеш приложения, а не в папку на устройстве.Сохранение фотографий в кэш приложения 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); 
} 

Пользователь может захватить до пяти фотографий и отправить их на сервер и нужно не сохранять фотографии на устройстве. Как я могу это реализовать?

ответ

0

Но я не знаю, как сохранить фотографии в кэш приложения, а не в папку на устройстве.

Я предлагаю вам с помощью ApplicationData.TemporaryFolder создать временную StorageFile:

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