簡體   English   中英

trackBar亮度控件無法將整個顏色范圍從黑色滾動到白色

[英]trackBar Brightness Control is not scrolling entire color range from Black to White

我有一個跟蹤欄控件,用於調整表單背景顏色的亮度。 最終,我將對其進行修改以調整圖像的亮度。 如果您查看亮度滑塊在Microsoft colorDialog控件中的工作方式,那么當您上下移動時,該值將從白色變為黑色,但是在中間,原始顏色的色調永遠不會丟失。 最初,我失去了色調,只是進行了灰度調整,但最終找到了解決方案。

我當前的問題是我無法調整整個顏色范圍。 例如,當選擇顏色R 192,G 128,B 255時,我可以一直向下滾動到黑色,然后一直回到我的原始顏色,但是我不能向上滾動到白色。 我現在已經每天工作幾個小時,已經有10天了,要么從黑色變成白色而失去色相(已解決),要么得到當前的問題:我可以從薰衣草到黑色再到薰衣草,但無法向上滾動到白色。 非常感謝您的幫助。 謝謝。

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); 
}

這是我的第一篇文章,我閱讀了有關不詢問重復問題的新客戶對帳單。 我已經對此進行了研究,但在這里沒有看到這個問題。 謝謝。

在代碼中,變量xRed, xGreen and xBlue將被分配一個值,具體取決於表單背景色的rgb值。 例如,如果表單的背景色的RGB值為(150、170和180),則xRed將為0.588,G將為0.667,B將為0.705

當您將軌跡欄移到最大值(例如255)時,表單的背景顏色將為bgRed = xRed * trackBar1.value (150),bgGreen將為170,bgBlue將為180,這是表單的原始背景顏色。

我認為,以100%的亮度顯示原始顏色是正確的行為。 如果要將白色顯示為100%的背景色,則應將代碼更改為如下所示

private void trackBar1_Scroll(object sender, EventArgs e)
    {
        double bgRed = 0, bgGreen = 0, bgBlue = 0;
        if(this.trackBar1.value==this.trackBar1.Maximum)
        {
            bgRed=255;
            bgGreen=255;
            bgBlue=255;
        }

       else{
            //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); 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM