3

FileOpenPicker에서 이미지를로드하고 나중에 사용할 수 있도록 WritableBitmap에 저장하려고합니다. 그것은 작동하지만 고해상도 이미지 (예 : jpg 2592x3888)를로드하면 내 앱이 파손됩니다. 큰 이미지를 처리하는 데 너무 오래 걸립니다. 그래서 제 질문은, 제가 여기서 뭘 잘못하고있는 걸까요? 가장 좋은 방법은 무엇입니까?Windows Phone 8.1에서 고해상도 사진을 처리하는 방법


StorageFile file = args.Files[0]; 
using (IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.Read)) 
{ 
    App.context.Image = new WriteableBitmap(1, 1); 
    stream.Seek(0); 
    int width = (int)Frame.ActualWidth; 
    int height = (int)Frame.ActualHeight; 
    App.context.Image = await BitmapFactory.New(1, 1).FromStream(stream); 
    App.context.Image = App.context.Image.Resize(width, height, WriteableBitmapExtensions.Interpolation.NearestNeighbor); 
    this.Frame.Navigate(typeof(RecognizingPage)); 
} 

PS :이 정말 작업 버전입니다 -이 너비와 높이를 사용하지 않습니다.

+1

노키아는 높은 해상도 이미지 라이브러리를 (어쩌면이 당신을 도울 수)이 있습니다 http://developer.nokia.com/resources/library/ Lumia/imaging/working-with-high-resolution-photos.html –

+0

고맙겠습니다. 그러나 "writeableBitmapEx 문제"가 여전히 여기에 있습니다. 이 기사에서는 이미지가로드되고 더 작은 BitmapImage로 디코딩됩니다. WriteableBitmapEx에로드하고 싶습니다. 이것에 쉽고 효율적인 방법이 있습니까? WriteableBitmap에 DecodePixelWidth 및 Height가 없습니다. –

답변

0

아래 코드를 사용하면 해상도가 낮은 이미지를 디코딩 할 수 있습니다.

using (var storageStream = await storageFile.OpenAsync(FileAccessMode.ReadWrite)) 
{ 
var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId, storageStream); 
var pixelStream = yourWriteableBitmap.PixelBuffer.AsStream(); 
var pixels = new byte[pixelStream.Length]; 
await pixelStream.ReadAsync(pixels, 0, pixels.Length); 

encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Ignore, (uint)yourWriteableBitmap.PixelWidth, (uint)yourWriteableBitmap.PixelHeight, 48, 48, pixels); 
await encoder.FlushAsync(); 
} 
당신은 자세한 내용은이 질문을 참조 할 수 있습니다

: WriteableBitmap SaveJpeg missing for universal apps