//http://gaggerostechnicalnotes.blogspot.com/2012/01/wpf-colors-scale.html private WriteableBitmap CreateColorRangeBitmap(DSCore.ColorRange1D colorRange) { const int width = 64; const int height = 1; var bitmap = new WriteableBitmap(width, height, 96, 96, PixelFormats.Bgra32, null); var pixels = new uint[width * height]; for (var i = 1; i <= width; i++) { var t = (double)i / width; var newColor = DSCore.ColorRange1D.GetColorAtParameter(colorRange, t); pixels[i - 1] = (uint)((255 << 24) + (newColor.Red << 16) + (newColor.Green << 8) + newColor.Blue); } bitmap.WritePixels(new Int32Rect(0, 0, width, height), pixels, width * 4, 0); return(bitmap); }
private void UpdateColorRange() { var s = dynamoViewModel.Model.Scheduler; // prevent data race by running on scheduler var t = new DelegateBasedAsyncTask(s, () => { colorRange = colorRangeNode.ComputeColorRange(dynamoModel.EngineController); }); // then update on the ui thread t.ThenSend((_) => { var bmp = CreateColorRangeBitmap(colorRange); gradientImage.Source = bmp; }, syncContext); s.ScheduleForExecution(t); }