public void TestFetchDecodedImageSuccess() { var completion = new ManualResetEvent(false); var dataSource = _imagePipeline.FetchDecodedImage(ImageRequest.FromUri(IMAGE_URL), null); var dataSubscriber = new BaseDataSubscriberImpl <CloseableReference <CloseableImage> >( async response => { CloseableReference <CloseableImage> reference = response.GetResult(); if (reference != null) { SoftwareBitmap bitmap = ((CloseableBitmap)reference.Get()).UnderlyingBitmap; try { Assert.IsTrue(bitmap.PixelWidth != 0); Assert.IsTrue(bitmap.PixelHeight != 0); Assert.IsTrue(_imagePipeline.IsInBitmapMemoryCache(ImageRequest.FromUri(IMAGE_URL))); Assert.IsTrue(await _imagePipeline.IsInDiskCacheAsync(IMAGE_URL).ConfigureAwait(false)); } catch (Exception) { Assert.Fail(); } finally { CloseableReference <CloseableImage> .CloseSafely(reference); completion.Set(); } } else { Assert.Fail(); completion.Set(); } }, response => { Assert.Fail(); completion.Set(); }); dataSource.Subscribe(dataSubscriber, CallerThreadExecutor.Instance); completion.WaitOne(); }
public void UpdateImage(Image image, Uri uri) { ImageRequest request = ImageRequestBuilder .NewBuilderWithSource(uri) .SetProgressiveRenderingEnabled(true) .Build(); var dataSource = _imagePipeline.FetchDecodedImage(request, null); var dataSubscriber = new BaseDataSubscriberImpl <CloseableReference <CloseableImage> >( async bitmapDataSource => { if (bitmapDataSource != null) { var reference = bitmapDataSource.GetResult(); try { SoftwareBitmap bitmap = ((CloseableBitmap)reference.Get()).UnderlyingBitmap; await DispatcherHelpers.RunOnDispatcherAsync(() => { var writeableBitmap = new WriteableBitmap(bitmap.PixelWidth, bitmap.PixelHeight); bitmap.CopyToBuffer(writeableBitmap.PixelBuffer); image.Source = writeableBitmap; }) .ConfigureAwait(false); } finally { CloseableReference <CloseableImage> .CloseSafely(reference); } } }, _ => { }); dataSource.Subscribe(dataSubscriber, CallerThreadExecutor.Instance); }