示例#1
0
        public virtual Imager ComposeFrames(int imageWidth, int imageHeight, ImageStackLayout imageStackLayout)
        {
            var stageFrames = _images.Length;

            _outputImage = new Image <Rgba32>(imageWidth, imageHeight);
            var singleImageWidth  = imageWidth;
            var singleImageHeight = imageHeight;
            Func <int, Point> pointBuilder;

            switch (imageStackLayout)
            {
            case ImageStackLayout.Horizontal:
                singleImageWidth = imageWidth / stageFrames;
                pointBuilder     = index => new Point(singleImageWidth * index, 0);
                break;

            case ImageStackLayout.Vertical:
                singleImageHeight = imageHeight / stageFrames;
                pointBuilder      = index => new Point(0, singleImageHeight * index);
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(imageStackLayout), imageStackLayout, null);
            }

            Parallel.For(0, _images.Length, index => {
                var image = _images[index];
                image.Mutate(o => o.Resize(new Size(singleImageWidth, singleImageHeight)));
                _outputImage.Mutate(o => o.DrawImage(image, pointBuilder.Invoke(index), 1f));
            });

            return(this);
        }
        private async void LoadAnimations()
        {
            await Task.WhenAny(
                ImageStackLayout.FadeTo(1, 1000),
                PlotLabel.TranslateTo(-10, 0, 600, Easing.BounceIn),
                FactsStackLayout.TranslateTo(0, 30, 600)
                );

            await Task.WhenAll(
                PlotLabel.TranslateTo(0, 0, 300),
                FactsStackLayout.TranslateTo(0, 0, 300)
                );
        }