public MoveToolContentRenderer(BitmapLayer activeLayer, MoveToolChanges changes, Result <IRenderer <ColorAlpha8> > lazyDeltaSelectionMask, Result <IRenderer <ColorAlpha8> > lazyFinalSelectionMask) : base(activeLayer.Width, activeLayer.Height, false) { Validate.Begin().IsNotNull <BitmapLayer>(activeLayer, "activeLayer").IsNotNull <MoveToolChanges>(changes, "changes").IsNotNull <Result <IRenderer <ColorAlpha8> > >(lazyDeltaSelectionMask, "lazyDeltaSelectionMask").IsNotNull <Result <IRenderer <ColorAlpha8> > >(lazyFinalSelectionMask, "lazyFinalSelectionMask").Check(); this.activeLayer = activeLayer; this.changes = changes; this.lazyDeltaSelectionMask = lazyDeltaSelectionMask; this.lazyFinalSelectionMask = lazyFinalSelectionMask; switch (changes.PixelSource) { case MoveToolPixelSource.ActiveLayer: this.source = activeLayer.Surface; break; case MoveToolPixelSource.Bitmap: this.source = changes.BitmapSource.Object; break; default: throw ExceptionUtil.InvalidEnumArgumentException <MoveToolPixelSource>(changes.PixelSource, "changes.PixelSource"); } Matrix3x2Double matrix = changes.DeltaTransform * changes.EditTransform; if ((changes.MoveToolResamplingAlgorithm == ResamplingAlgorithm.NearestNeighbor) || changes.FinalTransform.IsIntegerTranslation) { this.sourceTx = new TransformedNearestNeighborContentRenderer(activeLayer.Size(), this.source, matrix); } else { RectDouble baseBounds = changes.BaseBounds; RectInt32 srcCoverageBounds = changes.BaseTransform.Transform(baseBounds).Int32Bound; this.sourceTx = new TransformedBilinearContentRenderer(activeLayer.Size(), this.source, srcCoverageBounds, matrix); } }
public RecolorToolContentRenderer(BitmapLayer activeLayer, RecolorToolChanges changes) : base(activeLayer.Width, activeLayer.Height, changes) { IRenderer <ColorAlpha8> renderer2; this.sampleSource = activeLayer.Surface; byte x = (byte)Math.Round((double)(changes.Tolerance * 255.0), MidpointRounding.AwayFromZero); byte tolerance = ByteUtil.FastScale(x, x); if (changes.SamplingMode == RecolorToolSamplingMode.SecondaryColor) { this.basisColor = changes.BasisColor; } else { this.basisColor = GetBasisColor(changes, this.sampleSource); } IRenderer <ColorAlpha8> stencilSource = new FillStencilByColorRenderer(this.sampleSource, this.basisColor, tolerance, this); if (changes.Antialiasing) { renderer2 = new FeatheredMaskRenderer(this.sampleSource, changes.BasisColor, stencilSource, tolerance, this); } else { renderer2 = stencilSource; } IRenderer <ColorAlpha8> first = changes.RenderCache.CreateMaskRenderer(activeLayer.Size(), this); this.maskRenderer = new MultiplyRendererAlpha8(first, renderer2); }