将 ConsoleColor 更改为十六进制值
Change ConsoleColor to a hex value
所以我最近开始学习 C#,并且正在努力将控制台的背景颜色更改为十六进制值。这是我的代码:
using System;
namespace MyFisrtC_App
{
class Program
{
static void Main(string[] args)
{
ConsoleColor BGColor = ConsoleColor.White;
ConsoleColor FGColor = ConsoleColor.Black;
Console.Title = "Dumb App";
Console.BackgroundColor = BGColor;
Console.ForegroundColor = FGColor;
Console.Clear();
Console.WriteLine("This is just a simple dumb app. There is nothing special about it.");
Console.ReadKey();
}
}
}
此外,如果您知道如何在 C# 中更改字体,那就太棒了。
using System;
namespace TestCSharp
{
class Program
{
static void Main(string[] args)
{
Console.ForegroundColor = ConsoleColor.White;
Console.BackgroundColor = ConsoleColor.Red;
Console.WriteLine("background red and text white");
Console.ResetColor();
Console.WriteLine("Color reset");
Console.ReadKey();
}
}
}
你不能使用十六进制值,你可以使用这些颜色:
黑色,
深蓝,
深绿色,
深青色,
深红,
深洋红色,
暗黄色,
灰色的,
深灰色,
蓝色的,
绿色的,
青色,
红色的,
品红,
黄色的,
白色
ConsoleColour 是一个枚举,它本质上是一个具有定义名称的数字列表。因此,您可以执行以下操作将数字转换为颜色
int number = 7;
ConsoleColor colour = (ConsoleColor)number;
如果你想从十六进制开始使用下面的
string hex = "0A";
int number = Convert.ToInt32(hex, 16);
ConsoleColor colour = (ConsoleColor)number;
你只需要确保数字不超出枚举的长度,例如
if(number < Enum.GetValues<ConsoleColor>().Length -1 && number >= 0)
{
Console.ForeGroundColor = (ConsoleColor)number;
}
很遗憾,由于控制台的限制,这是不可能的 API。
但是您可以计算出与 API 中存在的颜色最接近的颜色。
static ConsoleColor ClosestConsoleColor(byte r, byte g, byte b)
{
ConsoleColor ret = 0;
double rr = r, gg = g, bb = b, delta = double.MaxValue;
foreach (ConsoleColor cc in Enum.GetValues(typeof(ConsoleColor)))
{
var n = Enum.GetName(typeof(ConsoleColor), cc);
var c = System.Drawing.Color.FromName(n == "DarkYellow" ? "Orange" : n); // bug fix
var t = Math.Pow(c.R - rr, 2.0) + Math.Pow(c.G - gg, 2.0) + Math.Pow(c.B - bb, 2.0);
if (t == 0.0)
return cc;
if (t < delta)
{
delta = t;
ret = cc;
}
}
return ret;
}
这来自: 全部归功于@Glenn
所以我最近开始学习 C#,并且正在努力将控制台的背景颜色更改为十六进制值。这是我的代码:
using System;
namespace MyFisrtC_App
{
class Program
{
static void Main(string[] args)
{
ConsoleColor BGColor = ConsoleColor.White;
ConsoleColor FGColor = ConsoleColor.Black;
Console.Title = "Dumb App";
Console.BackgroundColor = BGColor;
Console.ForegroundColor = FGColor;
Console.Clear();
Console.WriteLine("This is just a simple dumb app. There is nothing special about it.");
Console.ReadKey();
}
}
}
此外,如果您知道如何在 C# 中更改字体,那就太棒了。
using System;
namespace TestCSharp
{
class Program
{
static void Main(string[] args)
{
Console.ForegroundColor = ConsoleColor.White;
Console.BackgroundColor = ConsoleColor.Red;
Console.WriteLine("background red and text white");
Console.ResetColor();
Console.WriteLine("Color reset");
Console.ReadKey();
}
}
}
你不能使用十六进制值,你可以使用这些颜色:
黑色, 深蓝, 深绿色, 深青色, 深红, 深洋红色, 暗黄色, 灰色的, 深灰色, 蓝色的, 绿色的, 青色, 红色的, 品红, 黄色的, 白色
ConsoleColour 是一个枚举,它本质上是一个具有定义名称的数字列表。因此,您可以执行以下操作将数字转换为颜色
int number = 7;
ConsoleColor colour = (ConsoleColor)number;
如果你想从十六进制开始使用下面的
string hex = "0A";
int number = Convert.ToInt32(hex, 16);
ConsoleColor colour = (ConsoleColor)number;
你只需要确保数字不超出枚举的长度,例如
if(number < Enum.GetValues<ConsoleColor>().Length -1 && number >= 0)
{
Console.ForeGroundColor = (ConsoleColor)number;
}
很遗憾,由于控制台的限制,这是不可能的 API。
但是您可以计算出与 API 中存在的颜色最接近的颜色。
static ConsoleColor ClosestConsoleColor(byte r, byte g, byte b)
{
ConsoleColor ret = 0;
double rr = r, gg = g, bb = b, delta = double.MaxValue;
foreach (ConsoleColor cc in Enum.GetValues(typeof(ConsoleColor)))
{
var n = Enum.GetName(typeof(ConsoleColor), cc);
var c = System.Drawing.Color.FromName(n == "DarkYellow" ? "Orange" : n); // bug fix
var t = Math.Pow(c.R - rr, 2.0) + Math.Pow(c.G - gg, 2.0) + Math.Pow(c.B - bb, 2.0);
if (t == 0.0)
return cc;
if (t < delta)
{
delta = t;
ret = cc;
}
}
return ret;
}
这来自: 全部归功于@Glenn