예제 #1
0
        public ReprojectRowOperation(
            Registration registration,
            Image <Rgba32> target,
            int xOffset,
            int yOffset,
            RenderOptions options)
        {
            _registration = registration;
            _target       = target;
            _xOffset      = xOffset;
            _yOffset      = yOffset;
            _options      = options;

            Guard.Against.Null(registration.Image, nameof(registration.Image));
            Guard.Against.Null(options.ImageOffset, nameof(options.ImageOffset));

            _sourceBuffer = ImageBuffer.ToBuffer(registration.Image);
            _imageOffset  = options.ImageOffset;

            // Normalise longitude range so it doesn't wrap around the map
            _longitudeRange = registration.LongitudeRange.UnwrapLongitude();
            _latitudeRange  = registration.Definition.LatitudeRange;

            // Calculate end longitude for blend
            var overlap = BlendRatio * (_longitudeRange.End - _longitudeRange.Start);

            _blendEndLongitude = _longitudeRange.End + overlap;
        }
예제 #2
0
        /// <summary>
        ///     Crop to a specified latitude range.
        /// </summary>
        private void Crop(Image <Rgba32> underlay, Range latitudeRange)
        {
            var yPixelRange = latitudeRange.ToPixelRangeY(underlay.Height);

            // Crop underlay to target height
            _logger.LogInformation("Cropping underlay to {min} - {max} px height", yPixelRange.Start, yPixelRange.End);
            underlay.Mutate(c => c.Crop(new Rectangle(0, yPixelRange.Start, underlay.Width, yPixelRange.Range)));
        }
예제 #3
0
        /// <summary>
        ///     Offsets an equirectangular underlay to start at a specified longitude.
        /// </summary>
        private void Offset(Image <Rgba32> underlay, Range longitudeRange)
        {
            var xPixelRange = longitudeRange.ToPixelRangeX(underlay.Width);

            var offset = -xPixelRange.Start;

            _logger.LogInformation("Offsetting underlay by {pixels} px", offset);
            underlay.HorizontalOffset(offset);
        }