Exemple #1
0
        private Task <RenderResult> RenderInternalAsync(IImageProvider source, Size sourceSize, IImageProcessor processor, RenderOption renderOptions)
        {
            if (source == null)
            {
                throw new NullReferenceException("source");
            }

            processor.OnBeforeRender();
            var renderAtSourceSize = (renderOptions & RenderOption.RenderAtSourceSize) == RenderOption.RenderAtSourceSize;

            var renderSize = processor.CanRenderAtPreviewSize && !renderAtSourceSize ? PreviewSize : sourceSize;

            Debug.WriteLine(string.Format("RenderEffectAsync {0} sourceSize = {1}, renderSize = {2}", processor.Name,
                                          sourceSize, renderSize));

            var stopwatch = Stopwatch.StartNew();

            var effect = processor.GetEffectAsync(source, sourceSize, renderSize);

            if (effect.IsSynchronous)
            {
                return(FinishRender(effect.Result, stopwatch, renderOptions, renderSize));
            }
            else
            {
                return(effect.Task.ContinueWith(effectTask => FinishRender(effectTask.Result, stopwatch, renderOptions, renderSize), TaskContinuationOptions.OnlyOnRanToCompletion).Unwrap());
            }
        }
		public Task RenderAsync(SoftwareBitmap sourceBitmap, IImageProcessor processor)
        {
			var sourceBitmapSize = new Size(sourceBitmap.PixelWidth, sourceBitmap.PixelHeight);

			Debug.WriteLine(string.Format("RenderThumbnailAsync {0} sourceSize = {1} thumbnailSize = {2}", processor.Name, sourceBitmapSize, m_thumbnailSize));

            var effect = processor.GetEffectAsync(new SoftwareBitmapImageSource(sourceBitmap), sourceBitmapSize, m_thumbnailSize);

            // Avoid creating a Task object on the heap if not necessary.
            if (effect.IsSynchronous)
            {
                return FinishRenderAsync(effect.Result, processor);
            }
            else
            {
                return effect.Task.ContinueWith(effectTask => FinishRenderAsync(effectTask.Result, processor), TaskContinuationOptions.OnlyOnRanToCompletion);
            }
        }
Exemple #3
0
        public Task RenderAsync(SoftwareBitmap sourceBitmap, IImageProcessor processor)
        {
            var sourceBitmapSize = new Size(sourceBitmap.PixelWidth, sourceBitmap.PixelHeight);

            Debug.WriteLine(string.Format("RenderThumbnailAsync {0} sourceSize = {1} thumbnailSize = {2}", processor.Name, sourceBitmapSize, m_thumbnailSize));

            var effect = processor.GetEffectAsync(new SoftwareBitmapImageSource(sourceBitmap), sourceBitmapSize, m_thumbnailSize);

            // Avoid creating a Task object on the heap if not necessary.
            if (effect.IsSynchronous)
            {
                return(FinishRenderAsync(effect.Result, processor));
            }
            else
            {
                return(effect.Task.ContinueWith(effectTask => FinishRenderAsync(effectTask.Result, processor), TaskContinuationOptions.OnlyOnRanToCompletion));
            }
        }
        private Task<RenderResult> RenderInternalAsync(IImageProvider source, Size sourceSize, IImageProcessor processor, RenderOption renderOptions)
        {
            if (source == null)
            {
                throw new NullReferenceException("source");
            }

            processor.OnBeforeRender();
            var renderAtSourceSize = (renderOptions & RenderOption.RenderAtSourceSize) == RenderOption.RenderAtSourceSize;

            var renderSize = processor.CanRenderAtPreviewSize && !renderAtSourceSize ? PreviewSize : sourceSize;

            Debug.WriteLine(string.Format("RenderEffectAsync {0} sourceSize = {1}, renderSize = {2}", processor.Name,
                sourceSize, renderSize));

            var stopwatch = Stopwatch.StartNew();

            var effect = processor.GetEffectAsync(source, sourceSize, renderSize);

            if (effect.IsSynchronous)
            {
                return FinishRender(effect.Result, stopwatch, renderOptions, renderSize);
            }
            else
            {
                return effect.Task.ContinueWith(effectTask => FinishRender(effectTask.Result, stopwatch, renderOptions, renderSize), TaskContinuationOptions.OnlyOnRanToCompletion).Unwrap();
            }
        }