예제 #1
0
        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();
        }
예제 #2
0
        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);
        }