我的颜色选择器遇到问题,调整不透明度似乎无法正常工作。它不会按预期将不透明度设置应用于所选颜色,而是在调整不透明度之前始终将颜色变为白色。这导致不透明度设置不会影响我按照我想要的方式选择的颜色。本质上,尽管我努力修改不透明度,但所选颜色并未准确反映这些变化。
这是我的不透明度代码并将颜色保存到面板。 。 .
namespace System_Tools
{
public partial class colorpickerPage : UserControl
{
private Color selectedColor = Color.White;
public colorpickerPage()
{
InitializeComponent();
colorWheelPictureBox.MouseClick += colorWheelPictureBox_MouseClick;
opacityTrackBar.Scroll += opacityTrackBar_Scroll;
UpdateColorDisplays(selectedColor);
}
private Form1 parentForm;
public void SetParentForm(Form1 form)
{
parentForm = form;
}
public string ColorToHex(Color color)
{
return $"#{color.R:X2}{color.G:X2}{color.B:X2}";
}
public string ColorToHSV(Color color)
{
double hue = color.GetHue();
double saturation = color.GetSaturation();
double brightness = color.GetBrightness();
return $"{hue:F2}, {saturation:F2}, {brightness:F2}";
}
public string ColorToHSL(Color color)
{
double r = color.R / 255.0;
double g = color.G / 255.0;
double b = color.B / 255.0;
double max = Math.Max(r, Math.Max(g, b));
double min = Math.Min(r, Math.Min(g, b));
double h = color.GetHue();
double l = (max + min) / 2.0;
double s = (max == min) ? 0 : (l <= 0.5 ? (max - min) / (max + min) : (max - min) / (2 - max - min));
return $"{h:F2}, {s:F2}, {l:F2}";
}
public string ColorToCMYK(Color color)
{
float r = color.R / 255f;
float g = color.G / 255f;
float b = color.B / 255f;
float k = 1 - Math.Max(r, Math.Max(g, b));
float c = (1 - r - k) / (1 - k);
float m = (1 - g - k) / (1 - k);
float y = (1 - b - k) / (1 - k);
return $"{c:F2}, {m:F2}, {y:F2}, {k:F2}";
}
private void colorWheelPictureBox_MouseClick(object sender, MouseEventArgs e)
{
Bitmap bitmap = new Bitmap(colorWheelPictureBox.Image);
Color selectedColor = bitmap.GetPixel(e.X, e.Y);
UpdateColorDisplays(selectedColor);
if (selectedColor.A != 0)
{
hexTextBox.Text = ColorToHex(selectedColor);
rgbTextBox.Text = $"{selectedColor.R}, {selectedColor.G}, {selectedColor.B}";
hsvTextBox.Text = ColorToHSV(selectedColor);
hslTextBox.Text = ColorToHSL(selectedColor);
cmykTextBox.Text = ColorToCMYK(selectedColor);
}
}
private void opacityTrackBar_Scroll(object sender, EventArgs e)
{
UpdateColorDisplays(selectedColor);
}
private void UpdateColorDisplays(Color color)
{
hexTextBox.Text = ColorToHex(color);
rgbTextBox.Text = $"{color.R}, {color.G}, {color.B}, {color.A}";
hsvTextBox.Text = ColorToHSV(color);
hslTextBox.Text = ColorToHSL(color);
cmykTextBox.Text = ColorToCMYK(color);
float opacity = opacityTrackBar.Value / 255f;
Color blendedColor = Color.FromArgb((int)(color.A * opacity), color.R, color.G, color.B);
colorDisplayPanel.BackColor = blendedColor;
}
}
}
我期待它,因为它会改变颜色的不透明度。
在
colorWheelPictureBox_MouseClick()
中,您声明了一个名为 selectedColor
的 LOCAL 变量,它隐藏了您的类变量。
这意味着在
opacityTrackBar_Scroll()
中它将变回白色,因为类变量永远不会更改为所选颜色...
改变:
private void colorWheelPictureBox_MouseClick(object sender, MouseEventArgs e)
{
Bitmap bitmap = new Bitmap(colorWheelPictureBox.Image);
Color selectedColor = bitmap.GetPixel(e.X, e.Y);
UpdateColorDisplays(selectedColor);
// ... more code ...
}
致:
private void colorWheelPictureBox_MouseClick(object sender, MouseEventArgs e)
{
Bitmap bitmap = new Bitmap(colorWheelPictureBox.Image);
selectedColor = bitmap.GetPixel(e.X, e.Y);
UpdateColorDisplays(selectedColor);
// ... more code ...
}