Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将ARGB转换为十六进制_C#_.net_Rgb - Fatal编程技术网

C# 将ARGB转换为十六进制

C# 将ARGB转换为十六进制,c#,.net,rgb,C#,.net,Rgb,我正在尝试根据下载文件的百分比制作一个颜色变化的mehapps metroui进度条。在lua,我喜欢这样: ARGB(255, 255 * percent, 255 - (255 * percent), 0) 现在在C#中尝试这样做: label2工作得很好,但mycolor线错误如下: 无法从双精度转换为字节 我甚至试着使用progressBar1.Value得到了同样的错误。我做错了什么?有没有更简单的方法可以根据下载的百分比将进度条从红色变为绿色?将有问题的行更改为 Color myC

我正在尝试根据下载文件的百分比制作一个颜色变化的mehapps metroui进度条。在lua,我喜欢这样:

ARGB(255, 255 * percent, 255 - (255 * percent), 0)
现在在C#中尝试这样做:

label2工作得很好,但mycolor线错误如下:

无法从双精度转换为字节


我甚至试着使用
progressBar1.Value
得到了同样的错误。我做错了什么?有没有更简单的方法可以根据下载的百分比将进度条从红色变为绿色?

将有问题的行更改为

Color myColor = Color.FromArgb(255, Convert.ToByte(255 * Math.Round(percentage/100)), 255 - Convert.ToByte(255 * (Math.Round(percentage/100))), 0);

由于方法
Color.FromArg()
需要字节参数,因此必须将
percentage
除以100,才能得到0到1的值,然后将结果转换为byte。

将有问题的行更改为

Color myColor = Color.FromArgb(255, Convert.ToByte(255 * Math.Round(percentage/100)), 255 - Convert.ToByte(255 * (Math.Round(percentage/100))), 0);
由于方法
Color.FromArg()
需要字节参数,因此必须将
百分比
除以100,才能得到0到1的值,然后将结果转换为字节。

更改此行

Color myColor = Color.FromArgb(255, 255 * (Math.Round(percentage)), 255 - (255 * (Math.Round(percentage))), 0);

换行

Color myColor = Color.FromArgb(255, 255 * (Math.Round(percentage)), 255 - (255 * (Math.Round(percentage))), 0);


整个事情可以简单得多

void client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
    label2.Content = string.Format("Downloaded {0}kb of {1}kb ({2}%)", e.BytesReceived / 1000, e.TotalBytesToReceive / 1000, e.ProgressPercentage);
    progressBar1.Value = e.ProgressPercentage;
    int c = e.ProgressPercentage * 255 / 100;
    // unused, but this would be how you'd get it
    // Color myColor = Color.FromArgb(255, (byte)(255 - c), (byte)c, 0);
    string hex = string.Format("FF{0:X2}{1:X2}00", 255 - c, c);
    Console.WriteLine(hex);
}
我在这里所做的:

  • 在大多数地方使用
    e.ProgressPercentage
  • 通过将颜色缩放为整数来避免完全加倍(避免到处都是
    Round
    )。记下乘法和除法的顺序
  • 已使用
    string.Format
  • 强制转换为字节,避免
    Convert
顺便说一下,这是在红色和绿色之间的线性插值,意味着它穿过中间暗黄色,而不是真正的黄色。为了穿过黄色,你可以使用类似

int s = e.ProgressPercentage * 255 / 50;
int r = Math.Min(255, 510 - s);
int g = Math.Min(255, s);
然后以显而易见的方式进行


编辑:在重新请求时将红色/绿色进行交换。

整个过程可以简单得多

void client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
    label2.Content = string.Format("Downloaded {0}kb of {1}kb ({2}%)", e.BytesReceived / 1000, e.TotalBytesToReceive / 1000, e.ProgressPercentage);
    progressBar1.Value = e.ProgressPercentage;
    int c = e.ProgressPercentage * 255 / 100;
    // unused, but this would be how you'd get it
    // Color myColor = Color.FromArgb(255, (byte)(255 - c), (byte)c, 0);
    string hex = string.Format("FF{0:X2}{1:X2}00", 255 - c, c);
    Console.WriteLine(hex);
}
我在这里所做的:

  • 在大多数地方使用
    e.ProgressPercentage
  • 通过将颜色缩放为整数来避免完全加倍(避免到处都是
    Round
    )。记下乘法和除法的顺序
  • 已使用
    string.Format
  • 强制转换为字节,避免
    Convert
顺便说一下,这是在红色和绿色之间的线性插值,意味着它穿过中间暗黄色,而不是真正的黄色。为了穿过黄色,你可以使用类似

int s = e.ProgressPercentage * 255 / 50;
int r = Math.Min(255, 510 - s);
int g = Math.Min(255, s);
然后以显而易见的方式进行


编辑:重新请求时交换红色/绿色。

现在无法将整数转换为字节您是否划分了“百分比”?百分比类型是双精度还是整数?您意识到现在正在将[0,1]中的双精度舍入,对吗?现在无法将整数转换为字节您是否划分了“百分比”?百分比类型是double还是int?您知道现在正在对[0,1]中的double进行舍入,对吗?顺便说一下,请将这些int转换为double,不要将它们转换为字符串然后进行分析。顺便说一下,请将这些int转换为double,不要将它们转换为字符串,然后解析它们。这完全是简单易懂的。当然,使用C#6(每个人都应该使用它,因为它比以前的版本好得多;),1
string.Format
行可以更改为
string hex=$“FF{C:X2}{255-C:X2}00”好的,我花了一个小时想弄明白怎么做,但我不能而且我确信它很简单,你发布的东西很好,除了它从绿色变成红色,我需要它从红色变成绿色,我怎么能反转它?@loveroflua你原来的代码不是也这么做的吗?我试着让它也一样。不管怎样,那就换红绿灯吧,没什么大不了的。不过我会在中编辑它。这是一个完全简单易懂的.Og课程,使用C#6(每个人都应该使用它,因为它比以前的版本好得多;),1
string.Format
行可以更改为
string hex=$“FF{C:X2}{255-C:X2}00”好的,我花了一个小时想弄明白怎么做,但我不能而且我确信它很简单,你发布的东西很好,除了它从绿色变成红色,我需要它从红色变成绿色,我怎么能反转它?@loveroflua你原来的代码不是也这么做的吗?我试着让它也一样。不管怎样,那就换红绿灯吧,没什么大不了的。不过我会在中编辑它。