/// <summary> /// /// </summary> /// <param name="Bitmap"></param> /// <param name="ComponentValue"></param> /// <param name="Action"></param> /// <param name="Unit"></param> public override void UpdatePlane(WriteableBitmap Bitmap, int ComponentValue, Func <RowColumn, int, Rgba> Action = null, RowColumn?Unit = null) { base.UpdatePlane(Bitmap, ComponentValue, new Func <RowColumn, int, Rgba>((RowColumn, Value) => { return(new Lab(ComponentValue.ToDouble(), RowColumn.Column - 128.0, RowColumn.Row - 128.0, Observer, Illuminant).ToRgba()); }), new RowColumn(Lab.Range.A, Lab.Range.B)); }
/// <summary> /// /// </summary> /// <param name="Bitmap"></param> /// <param name="ComponentValue"></param> /// <param name="Action"></param> /// <param name="Unit"></param> public override void UpdatePlane(WriteableBitmap Bitmap, int ComponentValue, Func <RowColumn, int, Rgba> Action = null, RowColumn?Unit = null) { base.UpdatePlane(Bitmap, ComponentValue, new Func <RowColumn, int, Rgba>((RowColumn, Value) => { return(new Luv(RowColumn.Row.Add(Luv.MinValue.L), RowColumn.Column.Add(Luv.MinValue.U), ComponentValue.ToDouble(), Observer, Illuminant).ToRgba()); }), new RowColumn(Luv.Range.L, Luv.Range.U)); }
/// <summary> /// /// </summary> /// <param name="Bitmap"></param> /// <param name="ComponentValue"></param> /// <param name="Action"></param> /// <param name="Unit"></param> public override void UpdatePlane(WriteableBitmap Bitmap, int ComponentValue, Func <RowColumn, int, Rgba> Action = null, RowColumn?Unit = null) { base.UpdatePlane(Bitmap, ComponentValue, new Func <RowColumn, int, Rgba>((RowColumn, Value) => { return(new Hsl(RowColumn.Column, RowColumn.Row, ComponentValue.ToDouble()).ToRgba()); }), new RowColumn(Hsl.MaxValue.S, Hsl.MaxValue.H)); }
/// <summary> /// /// </summary> /// <param name="Bitmap"></param> /// <param name="ComponentValue"></param> /// <param name="Action"></param> /// <param name="Unit"></param> public override void UpdatePlane(WriteableBitmap Bitmap, int ComponentValue, Func <RowColumn, int, Rgba> Action = null, RowColumn?Unit = null) { base.UpdatePlane(Bitmap, ComponentValue, new Func <RowColumn, int, Rgba>((RowColumn, Value) => { return(new Lch(RowColumn.Row, RowColumn.Column, ComponentValue.ToDouble(), Observer, Illuminant).ToRgba()); }), new RowColumn(Lch.MaxValue.L, Lch.MaxValue.C)); }
/// <summary> /// /// </summary> /// <param name="Bitmap"></param> /// <param name="ComponentValue"></param> /// <param name="Action"></param> /// <param name="Unit"></param> public override void UpdatePlane(WriteableBitmap Bitmap, int ComponentValue, Func <RowColumn, int, Rgba> Action = null, RowColumn?Unit = null) { base.UpdatePlane(Bitmap, ComponentValue, new Func <RowColumn, int, Rgba>((RowColumn, Value) => { return(new Rgba(RowColumn.Column.ToByte(), RowColumn.Row.ToByte(), ComponentValue.ToByte())); }), new RowColumn(255, 255)); }
/// <summary> /// Updates the plane bitmap. /// </summary> public virtual void UpdatePlane(WriteableBitmap Bitmap, int ComponentValue, Func <RowColumn, int, Rgba> Action = null, RowColumn?Unit = null) { unsafe { Bitmap.Lock(); int CurrentPixel = -1; byte *Start = (byte *)(void *)Bitmap.BackBuffer; var u = Unit.Value; u.Row = u.Row / 256.0; u.Column = u.Column / 256.0; var CurrentRow = u.Row * 256.0; for (var Row = 0; Row < Bitmap.PixelHeight; Row++) { double CurrentCol = 0; for (var Col = 0; Col < Bitmap.PixelWidth; Col++) { var c = Action.Invoke(new RowColumn(CurrentRow, CurrentCol), ComponentValue); CurrentPixel++; *(Start + CurrentPixel * 3 + 0) = c.B; *(Start + CurrentPixel * 3 + 1) = c.G; *(Start + CurrentPixel * 3 + 2) = c.R; CurrentCol += u.Column; } CurrentRow -= u.Row; } Bitmap.AddDirtyRect(new Int32Rect(0, 0, Bitmap.PixelWidth, Bitmap.PixelHeight)); Bitmap.Unlock(); } }
/// <summary> /// /// </summary> /// <param name="Bitmap"></param> /// <param name="ComponentValue"></param> /// <param name="Action"></param> /// <param name="Unit"></param> public override void UpdatePlane(WriteableBitmap Bitmap, int ComponentValue, Func <RowColumn, int, Rgba> Action = null, RowColumn?Unit = null) { base.UpdatePlane(Bitmap, ComponentValue, new Func <RowColumn, int, Rgba>((RowColumn, Value) => { return(new Xyz(RowColumn.Column, RowColumn.Row, ComponentValue.ToDouble() / Xyz.Max[Xyz.Component.Z, Observer, Illuminant].Shift(2), Observer, Illuminant).ToRgba()); }), new RowColumn(Xyz.Max[Xyz.Component.Y, Observer, Illuminant], Xyz.Max[Xyz.Component.X, Observer, Illuminant])); }