public static MemoryStream ToMemoryStream([NotNull] this BitmapSource bitmapSource, [NotNull][InstantHandle] BitmapEncoderFactory bitmapEncoderFactory) { if (bitmapSource == null) { throw new ArgumentNullException(nameof(bitmapSource)); } if (bitmapEncoderFactory == null) { throw new ArgumentNullException(nameof(bitmapEncoderFactory)); } var bitmapEncoder = bitmapEncoderFactory.Invoke(); { var bitmapFrame = BitmapFrame.Create(bitmapSource); bitmapEncoder.Frames.Add(bitmapFrame); } var result = new MemoryStream(); bitmapEncoder.Save(result); result.Seek(0L, SeekOrigin.Begin); return(result); }
public static async Task <BitmapSize> ConvertAsync( List <ImageViewModel> images, StorageFolder targetFolder, BitmapConversionSettings settings, Action <int> progressCallback) { foreach (var image in images) { image.Status = image.ExtendedStatus = null; } uint success = 0; uint fail = 0; int i = 1; foreach (var image in images) { progressCallback(i); i++; image.Status = "Converting..."; try { BitmapConversionResult result = await BitmapEncoderFactory.EncodeAsync(image.File, targetFolder, settings).AsTask().ConfigureAwait(false); if (result.Success) { image.Status = $"Converted ({result.ResultFileSize / 1024d / 1024d:0.00} MB)"; image.LastSuccess = true; success++; } else { image.Status = "Failed"; image.ExtendedStatus = result.Status; image.LastSuccess = false; fail++; } } catch { image.Status = "Failed"; image.ExtendedStatus = "Unspecified error"; fail++; } } return(new BitmapSize { Width = success, Height = fail }); }