public async static Task<WriteableBitmap> ToBitmapImageAsync(this Stream imageStream, Tuple<int, int> downscale, bool downscaleDipUnits, InterpolationMode mode, ImageInformation imageInformation = null) { if (imageStream == null) return null; using (IRandomAccessStream image = imageStream.AsRandomAccessStream()) { if (downscale != null && (downscale.Item1 > 0 || downscale.Item2 > 0)) { using (var downscaledImage = await image.ResizeImage(downscale.Item1, downscale.Item2, mode, downscaleDipUnits, imageInformation).ConfigureAwait(false)) { BitmapDecoder decoder = await BitmapDecoder.CreateAsync(downscaledImage); downscaledImage.Seek(0); WriteableBitmap resizedBitmap = null; await MainThreadDispatcher.Instance.PostAsync(async () => { resizedBitmap = new WriteableBitmap((int)decoder.PixelWidth, (int)decoder.PixelHeight); await resizedBitmap.SetSourceAsync(downscaledImage); }); return resizedBitmap; } } else { BitmapDecoder decoder = await BitmapDecoder.CreateAsync(image); image.Seek(0); WriteableBitmap bitmap = null; if (imageInformation != null) { imageInformation.SetCurrentSize((int)decoder.PixelWidth, (int)decoder.PixelHeight); imageInformation.SetOriginalSize((int)decoder.PixelWidth, (int)decoder.PixelHeight); } await MainThreadDispatcher.Instance.PostAsync(async () => { bitmap = new WriteableBitmap((int)decoder.PixelWidth, (int)decoder.PixelHeight); await bitmap.SetSourceAsync(image); }); return bitmap; } } }
public static async Task<WriteableBitmap> ToWriteableBitmapAsync(this Stream stream) { var randomAccessStream = stream.AsRandomAccessStream(); var decoder = await BitmapDecoder.CreateAsync(randomAccessStream); // Get the first frame from the decoder var frame = await decoder.GetFrameAsync(0); var wid = (int) frame.PixelWidth; var hgt = (int) frame.PixelHeight; var target = new WriteableBitmap(wid, hgt); randomAccessStream.Seek(0); await target.SetSourceAsync(randomAccessStream); return target; }
public async static Task<BitmapHolder> ToBitmapHolderAsync(this Stream imageStream, Tuple<int, int> downscale, bool downscaleDipUnits, InterpolationMode mode) { if (imageStream == null) return null; using (IRandomAccessStream image = imageStream.AsRandomAccessStream()) { if (downscale != null && (downscale.Item1 > 0 || downscale.Item2 > 0)) { using (var downscaledImage = await image.ResizeImage(downscale.Item1, downscale.Item2, mode, downscaleDipUnits).ConfigureAwait(false)) { BitmapDecoder decoder = await BitmapDecoder.CreateAsync(downscaledImage); PixelDataProvider pixelDataProvider = await decoder.GetPixelDataAsync(); var bytes = pixelDataProvider.DetachPixelData(); int[] array = new int[decoder.PixelWidth * decoder.PixelHeight]; CopyPixels(bytes, array); return new BitmapHolder(array, (int)decoder.PixelWidth, (int)decoder.PixelHeight); } } else { BitmapDecoder decoder = await BitmapDecoder.CreateAsync(image); PixelDataProvider pixelDataProvider = await decoder.GetPixelDataAsync(); var bytes = pixelDataProvider.DetachPixelData(); int[] array = new int[decoder.PixelWidth * decoder.PixelHeight]; CopyPixels(bytes, array); return new BitmapHolder(array, (int)decoder.PixelWidth, (int)decoder.PixelHeight); } } }
public async static Task<BitmapHolder> ToBitmapHolderAsync(this Stream imageStream, Tuple<int, int> downscale, bool downscaleDipUnits, InterpolationMode mode, ImageInformation imageInformation = null) { if (imageStream == null) return null; using (IRandomAccessStream image = imageStream.AsRandomAccessStream()) { if (downscale != null && (downscale.Item1 > 0 || downscale.Item2 > 0)) { using (var downscaledImage = await image.ResizeImage(downscale.Item1, downscale.Item2, mode, downscaleDipUnits, imageInformation).ConfigureAwait(false)) { BitmapDecoder decoder = await BitmapDecoder.CreateAsync(downscaledImage); PixelDataProvider pixelDataProvider = await decoder.GetPixelDataAsync(); var bytes = pixelDataProvider.DetachPixelData(); return new BitmapHolder(bytes, (int)decoder.PixelWidth, (int)decoder.PixelHeight); } } else { BitmapDecoder decoder = await BitmapDecoder.CreateAsync(image); PixelDataProvider pixelDataProvider = await decoder.GetPixelDataAsync(); if (imageInformation != null) { imageInformation.SetCurrentSize((int)decoder.PixelWidth, (int)decoder.PixelHeight); imageInformation.SetOriginalSize((int)decoder.PixelWidth, (int)decoder.PixelHeight); } var bytes = pixelDataProvider.DetachPixelData(); return new BitmapHolder(bytes, (int)decoder.PixelWidth, (int)decoder.PixelHeight); } } }