private async void RunTriangleUpdaterAsync() { do { await _triangleUpdateRequired.WaitAsync(); if (_isLoaded) { var wb = new WriteableBitmap( (int)trianglePicker.ActualWidth, (int)trianglePicker.ActualHeight); var wbHue = new WriteableBitmap( (int)slidersPanel.ActualWidth - 80, 1); var wbSaturation = new WriteableBitmap( (int)slidersPanel.ActualWidth - 80, 1); var wbLightness = new WriteableBitmap( (int)slidersPanel.ActualWidth - 80, 1); var wbRed = new WriteableBitmap( (int)slidersPanel.ActualWidth - 80, 1); var wbGreen = new WriteableBitmap( (int)slidersPanel.ActualWidth - 80, 1); var wbBlue = new WriteableBitmap( (int)slidersPanel.ActualWidth - 80, 1); var color = ColorExtensions.FromHsl(hueRing.Value, 1, 0.5); await Task.WhenAll( wb.RenderColorPickerSaturationValueTriangleAsync(hueRing.Value), wbHue.RenderColorPickerHSLHueBarAsync(1.0, 0.5), wbSaturation.RenderColorPickerHSLSaturationBarAsync(hueRing.Value, 0.5), wbLightness.RenderColorPickerHSLLightnessBarAsync(hueRing.Value, 0.5), wbRed.RenderColorPickerRGBRedBarAsync(color.G / 255.0, color.B / 255.0), wbGreen.RenderColorPickerRGBGreenBarAsync(color.R / 255.0, color.B / 255.0), wbBlue.RenderColorPickerRGBBlueBarAsync(color.R / 255.0, color.G / 255.0)); if (_isLoaded) { triangleBrush.ImageSource = wb; hueBackground.ImageSource = wbHue; saturationBackground.ImageSource = wbSaturation; lightnessBackground.ImageSource = wbLightness; redBackground.ImageSource = wbRed; greenBackground.ImageSource = wbGreen; blueBackground.ImageSource = wbBlue; } } } while (_isLoaded); }
private void OnHueRingImage2SizeChanged(object sender, SizeChangedEventArgs e) { if (hueRingImage2.ActualHeight == 0 || hueRingImage2.ActualWidth == 0) { return; } var minSize = Math.Min(hueRingImage2.ActualHeight, hueRingImage2.ActualWidth); var outerRingRadius = minSize / 2; var innerRingRadius = outerRingRadius * 2 / 3; var triangleWidth = innerRingRadius * Math.Sqrt(3); var triangleHeight = innerRingRadius * 3 / 2; var wb = new WriteableBitmap((int)triangleWidth, (int)triangleHeight); #pragma warning disable CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed wb.RenderColorPickerSaturationValueTriangleAsync(); #pragma warning restore CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed saturationValueTriangleImage.Source = wb; saturationValueTriangleImage.Margin = new Thickness(0, outerRingRadius - innerRingRadius, 0, outerRingRadius - innerRingRadius * 0.5); }
private void OnHueRingImage2SizeChanged(object sender, SizeChangedEventArgs e) { if (hueRingImage2.ActualHeight == 0 || hueRingImage2.ActualWidth == 0) { return; } var minSize = Math.Min(hueRingImage2.ActualHeight, hueRingImage2.ActualWidth); var outerRingRadius = minSize / 2; var innerRingRadius = outerRingRadius * 2 / 3; var triangleWidth = innerRingRadius * Math.Sqrt(3); var triangleHeight = innerRingRadius * 3 / 2; var wb = new WriteableBitmap((int)triangleWidth, (int)triangleHeight); wb.RenderColorPickerSaturationValueTriangleAsync(); saturationValueTriangleImage.Source = wb; saturationValueTriangleImage.Margin = new Thickness(0, outerRingRadius - innerRingRadius, 0, outerRingRadius - innerRingRadius * 0.5); }