C#将4位颜色(= ConsoleColor)转换为RGB并返回

埃迪南德·福克斯(Eddynand Fuchs)

我想为游戏编写类似控制台的gui,然后从一个真正的控制台开始。所以我有一个类,指定了颜色。现在我想将consolecolor转换为rgb(24位),反之亦然。我已经试过了:

int d = (((int)col & 8) != 0) ? 255 : 128;
r = (((int)col & 4) != 0) ? d : 0;
g = (((int)col & 2) != 0) ? d : 0;
b = (((int)col & 1) != 0) ? d : 0;

4位色具有这种位外观:drgb。当d为0时,颜色将为深色,如果为1,则rgb值为255。我的问题是:在程序中,颜色1000(亮黑色)和颜色0111(深白色)是黑色和灰色。它们应该是深灰色和浅灰色。以及如何通过四舍五入将颜色转换回去,而不仅仅是将特定颜色转换回去?

奥利维尔·雅各·德斯科姆斯

颜色是在具有三个坐标轴R,G和B的3维参数空间中定义的。您可以计算两种颜色之间的距离ab如下所示:

double dist = Math.Sqrt(Sqr(a.R - b.R) + Sqr(a.G - b.G) + Sqr(a.B - b.B));

此公式使用此方法

private static int Sqr(int x)
{
    return x * x;
}

最佳匹配的颜色是距离最小的颜色。您还可以使用距离的平方来比较距离(以提高效率):

int sqrDist = Sqr(a.R - b.R) + Sqr(a.G - b.G) + Sqr(a.B - b.B);

现在使用16种控制台颜色定义一个数组:

Color[] consoleColors = new[] {
    Colors.Black,
    Colors.Red,
    ...
};

并获得最佳搭配

Color bestMatch;
int bestSqrDist = Int32.MaxValue;
foreach (Color consoleColor in consoleColors) {
    int sqrDist = Sqr(theColor.R - consoleColor.R) +
                  Sqr(theColor.G - consoleColor.G) +
                  Sqr(theColor.B - consoleColor.B);
    if (sqrDist < bestSqrDist) {
        bestMatch = consoleColor;
        bestSqrDist = sqrDist;
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将RGB颜色转换为x,y方向并返回

来自分类Dev

将CSS颜色转换为16位RGB

来自分类Dev

PHP将24位颜色转换为4位

来自分类Dev

PHP将24位颜色转换为4位

来自分类Dev

C#使用自定义RGB颜色将VBA宏转换为C#

来自分类Dev

将BGRA 8位十六进制字符串转换为C#颜色

来自分类Dev

将Android颜色转换为HEX或RGB

来自分类Dev

将RGB颜色转换为XY

来自分类Dev

将 128 位转换为 8 位 C# 数组

来自分类Dev

将0.75 RGB的RGB颜色值转换为RGBA

来自分类Dev

将RGB转换为HSV

来自分类Dev

将RGB转换为HSV

来自分类Dev

将RGB转换为HSV

来自分类Dev

将RGB转换为HSV

来自分类Dev

如何将十进制转换为二进制C#(4位)

来自分类Dev

C:将阵列转换为RGB图像

来自分类Dev

php函数将RYB颜色转换为RGB颜色

来自分类Dev

无法将rgb转换为YCbCr并无损失地返回

来自分类Dev

如何将返回的int值从ColorDrawable的getColor()转换为RGB?

来自分类Dev

如何在C ++中将16位十六进制颜色转换为RGB888值

来自分类Dev

将按位比较从C ++转换为C#

来自分类Dev

C#将负整数转换为11位

来自分类Dev

将C#按位运算转换为Javascript

来自分类Dev

将位字符串转换为byte [] c#

来自分类Dev

从十六进制颜色转换为RGB

来自分类Dev

从十六进制颜色转换为RGB

来自分类Dev

在java中将颜色转换为rgb值

来自分类Dev

无法将青色的整数颜色转换为RGB

来自分类Dev

将RGB代码列表转换为Matplotlib颜色图