public async void BitmapTransformAndSaveTest() { var uncroppedfile = await Windows.Storage.ApplicationData.Current.LocalFolder.GetFileAsync("uncropped.jpg"); if (uncroppedfile == null) { return; } WriteableBitmap wb = null; // create a stream from the file and decode the image var fileStream = await uncroppedfile.OpenAsync(Windows.Storage.FileAccessMode.Read); var decoder = await BitmapDecoder.CreateAsync(fileStream); // create a new stream and encoder for the new image using (InMemoryRandomAccessStream ras = new InMemoryRandomAccessStream()) { var enc = await BitmapEncoder.CreateForTranscodingAsync(ras, decoder); // convert the entire bitmap to a 100px by 100px bitmap enc.BitmapTransform.ScaledHeight = 100; enc.BitmapTransform.ScaledWidth = 100; var bounds = new BitmapBounds(); bounds.Height = 50; bounds.Width = 50; bounds.X = 50; bounds.Y = 50; enc.BitmapTransform.Bounds = bounds; // write out to the stream await enc.FlushAsync(); // create a writeable bitmap from the stream ras.Seek(0); wb = new WriteableBitmap(100, 100); wb.SetSource(ras); } // save the cropped file now var croppedfile = await Windows.Storage.ApplicationData.Current.LocalFolder.CreateFileAsync("cropped.jpg", Windows.Storage.CreationCollisionOption.ReplaceExisting); using (var stream = await croppedfile.OpenAsync(Windows.Storage.FileAccessMode.ReadWrite)) { var pixelStream = wb.PixelBuffer.AsStream(); var bytes = new byte[pixelStream.Length]; pixelStream.Seek(0, SeekOrigin.Begin); await pixelStream.ReadAsync(bytes, 0, (int)pixelStream.Length); await pixelStream.FlushAsync(); var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId, stream); encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Straight, (uint)wb.PixelWidth, (uint)wb.PixelHeight, 0, 0, bytes); await encoder.FlushAsync(); await stream.FlushAsync(); } }