Ejemplo n.º 1
0
        private async void OnDeferredImageRequestedHandler(DataProviderRequest request, DataPackage dp)
        {
            DataProviderDeferral deferral = request.GetDeferral();

            try
            {
                StorageFile img = await PictureHandler.AsStorageFile(Items.SelectedItem.Pixels, "ToShare.jpg");

                if (img != null)
                {
                    List <IStorageFile> imageItems = new List <IStorageFile>
                    {
                        img
                    };
                    dp.SetStorageItems(imageItems);

                    RandomAccessStreamReference imageStreamRef = RandomAccessStreamReference.CreateFromFile(img);
                    dp.Properties.Thumbnail = imageStreamRef;
                    dp.SetBitmap(imageStreamRef);
                }
            }
            catch (Exception e)
            {
                throw e;
            }
            deferral.Complete();
        }
        private async void OnDeferredImageRequestedHandler(DataProviderRequest providerRequest, StorageFile imageFile)
        {
            // In this delegate we provide updated Bitmap data using delayed rendering.

            if (imageFile != null)
            {
                // If the delegate is calling any asynchronous operations it needs to acquire the deferral first. This lets the
                // system know that you are performing some operations that might take a little longer and that the call to
                // SetData could happen after the delegate returns. Once you acquired the deferral object you must call Complete
                // on it after your final call to SetData.
                DataProviderDeferral       deferral       = providerRequest.GetDeferral();
                InMemoryRandomAccessStream inMemoryStream = new InMemoryRandomAccessStream();

                // Make sure to always call Complete when done with the deferral.
                try
                {
                    // Decode the image and re-encode it at 50% width and height.
                    IRandomAccessStream imageStream = await imageFile.OpenAsync(FileAccessMode.Read);

                    BitmapDecoder imageDecoder = await BitmapDecoder.CreateAsync(imageStream);

                    BitmapEncoder imageEncoder = await BitmapEncoder.CreateForTranscodingAsync(inMemoryStream, imageDecoder);

                    imageEncoder.BitmapTransform.ScaledWidth  = (uint)(imageDecoder.OrientedPixelWidth * 0.5);
                    imageEncoder.BitmapTransform.ScaledHeight = (uint)(imageDecoder.OrientedPixelHeight * 0.5);
                    await imageEncoder.FlushAsync();

                    providerRequest.SetData(RandomAccessStreamReference.CreateFromStream(inMemoryStream));
                }
                finally
                {
                    deferral.Complete();
                }
            }
        }
Ejemplo n.º 3
0
        // 用户点击了分享目标后会调用此方法
        private async void OnDeferredImageRequestedHandler(DataProviderRequest providerRequest, StorageFile imageFile)
        {
            // 获取 DataProviderDeferral,以开始异步处理
            DataProviderDeferral       deferral       = providerRequest.GetDeferral();
            InMemoryRandomAccessStream inMemoryStream = new InMemoryRandomAccessStream();

            try
            {
                // 将用户选中的图片缩小一倍,然后再分享
                IRandomAccessStream imageStream = await imageFile.OpenAsync(FileAccessMode.Read);

                BitmapDecoder imageDecoder = await BitmapDecoder.CreateAsync(imageStream);

                BitmapEncoder imageEncoder = await BitmapEncoder.CreateForTranscodingAsync(inMemoryStream, imageDecoder);

                imageEncoder.BitmapTransform.ScaledWidth  = (uint)(imageDecoder.OrientedPixelWidth * 0.5);
                imageEncoder.BitmapTransform.ScaledHeight = (uint)(imageDecoder.OrientedPixelHeight * 0.5);
                await imageEncoder.FlushAsync();

                // 停 3 秒,以模拟长时间任务
                await Task.Delay(3000);

                providerRequest.SetData(RandomAccessStreamReference.CreateFromStream(inMemoryStream));
            }
            finally
            {
                // 完成异步操作
                deferral.Complete();
            }
        }
Ejemplo n.º 4
0
        private async void ProvideData(DataProviderRequest request)
        {
            DataProviderDeferral deferral = request.GetDeferral();
            var stream = new InMemoryRandomAccessStream();
            await Graph.SaveImageAsync(stream);

            request.SetData(RandomAccessStreamReference.CreateFromStream(stream));
            deferral.Complete();
        }
        //<SnippetShareFileFunction_CS>
        //<SnippetShareFileFunction>
        async void OnDeferredImageRequestedHandler(DataProviderRequest request)
        {
            // Here we provide updated Bitmap data using delayed rendering
            if (this.imageStream != null)
            {
                //<SnippetGetDefferal_CS>
                //<SnippetGetDefferal>
                DataProviderDeferral deferral = request.GetDeferral();
                //</SnippetGetDefferal>
                //</SnippetGetDefferal_CS>

                try
                {
                    InMemoryRandomAccessStream inMemoryStream = new InMemoryRandomAccessStream();

                    // Decode the image
                    BitmapDecoder imageDecoder = await BitmapDecoder.CreateAsync(this.imageStream);

                    // Re-encode the image at 50% width and height
                    BitmapEncoder imageEncoder = await BitmapEncoder.CreateForTranscodingAsync(inMemoryStream, imageDecoder);

                    imageEncoder.BitmapTransform.ScaledWidth  = (uint)(imageDecoder.OrientedPixelHeight * 0.5);
                    imageEncoder.BitmapTransform.ScaledHeight = (uint)(imageDecoder.OrientedPixelHeight * 0.5);
                    await imageEncoder.FlushAsync();

                    request.SetData(RandomAccessStreamReference.CreateFromStream(inMemoryStream));
                }

                catch (Exception ex)
                {
                    // Handle the exception
                }

                finally
                {
                    deferral.Complete();
                }
            }
        }
        // <SnippetShareFileFunction_CS>
        async void OnDeferredImageRequestedHandler(DataProviderRequest request)
        {
            // Provide updated bitmap data using delayed rendering.
            if (this.imageStream != null)
            {
                DataProviderDeferral       deferral       = request.GetDeferral();
                InMemoryRandomAccessStream inMemoryStream = new InMemoryRandomAccessStream();

                // Decode the image.
                BitmapDecoder imageDecoder = await BitmapDecoder.CreateAsync(this.imageStream);

                // Re-encode the image at 50% width and height.
                BitmapEncoder imageEncoder = await BitmapEncoder.CreateForTranscodingAsync(inMemoryStream, imageDecoder);

                imageEncoder.BitmapTransform.ScaledWidth  = (uint)(imageDecoder.OrientedPixelHeight * 0.5);
                imageEncoder.BitmapTransform.ScaledHeight = (uint)(imageDecoder.OrientedPixelHeight * 0.5);
                await imageEncoder.FlushAsync();

                request.SetData(RandomAccessStreamReference.CreateFromStream(inMemoryStream));
                deferral.Complete();
            }
        }
Ejemplo n.º 7
0
        private void OnDeferredImageRequestedHandler(DataProviderRequest request)
        {
            if (_url != null)
            {
                // If the delegate is calling any asynchronous operations it needs to acquire
                // the deferral first. This lets the system know that you are performing some
                // operations that might take a little longer and that the call to SetData
                // could happen after the delegate returns. Once you acquired the deferral object
                // you must call Complete on it after your final call to SetData.
                DataProviderDeferral deferral = request.GetDeferral();

                // Make sure to always call Complete when finished with the deferral.
                try
                {
                    request.SetData(_url);
                }
                finally
                {
                    deferral.Complete();
                }
            }
        }
Ejemplo n.º 8
0
        private async void OnDeferredImageRequestedHandler(DataProviderRequest request)
        {
            // Request deferral to wait for async calls
            DataProviderDeferral deferral = request.GetDeferral();

            // XAML objects can only be accessed on the UI thread, and the call may come in on a background thread
            await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async() =>
            {
                try
                {
                    RenderTargetBitmap renderTargetBitmap = new RenderTargetBitmap();
                    InMemoryRandomAccessStream stream     = new InMemoryRandomAccessStream();
                    // Render to an image at the current system scale and retrieve pixel contents
                    await renderTargetBitmap.RenderAsync(collageCanvas);
                    var pixelBuffer = await renderTargetBitmap.GetPixelsAsync();

                    // Encode image to an in-memory stream
                    var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, stream);

                    encoder.SetPixelData(
                        BitmapPixelFormat.Bgra8,
                        BitmapAlphaMode.Ignore,
                        (uint)renderTargetBitmap.PixelWidth,
                        (uint)renderTargetBitmap.PixelHeight,
                        DisplayInformation.GetForCurrentView().LogicalDpi,
                        DisplayInformation.GetForCurrentView().LogicalDpi,
                        pixelBuffer.ToArray());

                    await encoder.FlushAsync();

                    // Set content of the DataProviderRequest to the encoded image in memory
                    request.SetData(RandomAccessStreamReference.CreateFromStream(stream));
                }
                finally
                {
                    deferral.Complete();
                }
            });
        }