У меня есть контроль трекбара, который регулирует яркость цвета фона формы. В конце концов, я изменю его, чтобы настроить яркость изображения. Если вы посмотрите, как ползунок яркости работает в Microsoft colorDialog Control, при перемещении вверх и вниз значение изменяется от белого до черного, а в середине оттенок исходного цвета никогда не теряется. Первоначально я терял оттенок и просто делал корректировку оттенков серого, но я, наконец, нашел для этого работу.trackBar Brightness Control не прокручивает весь диапазон цветов от черного до белого
Моя текущая проблема заключается в том, что я не могу настроить весь диапазон цветов. Например, при выборе цвета R 192, G 128, B 255, я могу прокрутить весь путь до черного и полностью вернуться к исходному цвету, но я не могу прокручивать до белого. Я работаю над этим кодом несколько часов в день в течение 10 дней и получаю от черного до белого и теряю оттенок (который разрешен) или выдает текущую проблему: я могу прокручивать от lavendar до черного до lavendar , но не может прокручиваться до белого. Я глубоко признателен за помощь. Спасибо.
public partial class Form1 : Form
{
double xRed, xGreen, xBlue, xColor;
bool count = true;
private void Form1_BackColorChanged(object sender, EventArgs e)
{
//Do this once, when user sets a new BG color
if (count == true)
{
//Get a % of the color value instead of the absolute value, when using absolute value, if it goes down near 0, or up near 255, hue is lost.
xRed = (double) this.BackColor.R/255;
xGreen = (double) this.BackColor.G/255;
xBlue = (double) this.BackColor.B/255;
xColor = (((xRed + xGreen + xBlue) * 255)/3);
xColor = Math.Round(xColor, 0);
//Label is just so I can see RGB and trackBar values
lblBGColor.Enabled = true;
trackBar1.Enabled = true;
trackBar1.Value = (int)xColor;
label1.Text = Convert.ToString(trackBar1.Value);
count = false;
}
}
private void trackBar1_Scroll(object sender, EventArgs e)
{
double bgRed = 0, bgGreen = 0, bgBlue = 0;
//Once it goes down to black or up to white, restore the hue value as a percent. Percent of R (value/255), Percent of G (value/255), Percent of B (value/255). SO if red is 196 and 196 is 80% of 255, red is 80% of trackbar value, if green is 128 and 128 is 50% of 255, green is 50% of trackbar value, etc...
//I suspect the problem is here, with trackBar1.Value. I also tried adding the trackBar1.Value change since last scroll, but that didn't help. Also tried setting trackBar1.Value to 128, but no help.
bgRed = xRed * trackBar1.Value;
bgGreen = xGreen * trackBar1.Value;
bgBlue = xBlue * trackBar1.Value;
bgRed = Math.Round(bgRed, 0);
bgGreen = Math.Round(bgGreen, 0);
bgBlue = Math.Round(bgBlue, 0);
if (bgRed > 255)
bgRed = 255;
if (bgGreen > 255)
bgGreen = 255;
if (bgBlue > 255)
bgBlue = 255;
//Avoid unneeded looping through BackColorChanged event
count = false;
//Set form and label values
this.BackColor = Color.FromArgb(255, (int)bgRed, (int)bgGreen, (int)bgBlue);
label1.Text = Convert.ToString((int)bgRed + " " + (int)bgGreen + " " + (int)bgBlue + " trackBar: " + trackBar1.Value);
}
Это мой первый пост, я прочитал новое заявление о регистрации, не задавая повторяющихся вопросов. Я исследовал это и не видел этого вопроса, заданного здесь. Спасибо.
сделать что: (двойной) (this.BackColor.R/256f); – TaW
Это изменение не повлияло на мой код. Что у тебя было на уме? Спасибо – MaoTseTongue
Вам нужно избегать ловушек целочисленного деления! (Вы включили f (float)? (Там могут быть другие места, чтобы следить за этим.) Любое значение байта <255 div на 255 равно 0, и сброс этого 0 в double слишком поздно! – TaW