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); } }
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(); } }