Pinta.ImageManipulation.Effects.BulgeEffect.RenderLine C# (CSharp) Method

RenderLine() protected method

protected RenderLine ( ISurface src, ISurface dst, Rectangle rect ) : void
src ISurface
dst ISurface
rect Rectangle
return void
		protected unsafe override void RenderLine (ISurface src, ISurface dst, Rectangle rect)
		{
			var bulge = (float)amount;

			var hw = dst.Width / 2f;
			var hh = dst.Height / 2f;
			var maxrad = Math.Min (hw, hh);
			var amt = bulge / 100f;

			hh = hh + (float)offset.Y * hh;
			hw = hw + (float)offset.X * hw;

			for (var y = rect.Top; y <= rect.Bottom; y++) {
				var dstPtr = dst.GetPointAddress (rect.Left, y);
				var srcPtr = src.GetPointAddress (rect.Left, y);
				var v = y - hh;

				for (var x = rect.Left; x <= rect.Right; x++) {
					var u = x - hw;
					var r = (float)Math.Sqrt (u * u + v * v);
					var rscale1 = (1f - (r / maxrad));

					if (rscale1 > 0) {
						var rscale2 = 1 - amt * rscale1 * rscale1;

						var xp = u * rscale2;
						var yp = v * rscale2;

						*dstPtr = Utility.GetBilinearSampleClamped (src, xp + hw, yp + hh);
					} else {
						*dstPtr = *srcPtr;
					}

					++dstPtr;
					++srcPtr;
				}
			}
		}
		#endregion