【问题标题】:Convert UNICODE to RGB color in C# [closed]在 C# 中将 UNICODE 转换为 RGB 颜色 [关闭]
【发布时间】:2014-06-05 18:35:02
【问题描述】:

我想用 C# 编写代码来构建将每个 UNICODE 代码转换为 RGB 颜色值的表。 我使用 UTF-16。 该表有三列,一列用于字符或符号或数字,另一列用于其 UNICODE 代码,最后一列用于 1600 万种颜色中的一种 谁能建议一个简单的方法来做到这一点???

【问题讨论】:

  • UNICODE 字符转 RGB 颜色?什么?
  • Encoding.Unicode.GetBytes 返回一个字节数组,您可以根据需要使用它转换为 RGB。但是,RGB 颜色代码有 3 个字节,而 UTF-16 有 1 到 8 个字节,这意味着您将很难尝试将 1 映射到 1。
  • 字符代码和颜色之间没有明显的关系。你想做什么?
  • @HansZ:我认为您混淆了 UTF-8 和 UTF-16。 UTF-16 代码永远不是一个字节。
  • 你能给出一些示例输入和预期输出吗?你的问题没有多大意义。

标签: c#


【解决方案1】:

如果您忽略组合字符等,则每个 Unicode 代码点都是 16 位。 RGB 是一个 24 位空间,红色使用一个字节,绿色使用一个字节,蓝色使用一个字节。显然,你不能用 16 位代码做到这一点。所以你要做的是使用,例如红色 5 位,绿色 5 位,蓝色 6 位。这是一种方法。

假设给你一个字符串:

const string foo = "Hello, world.";

// rrrr rggg ggbb bbbb

const int RedMask = 0xF8;  
const int GreenMask = 0xF8;
const int BlueMask = 0xFC;
const int RedShift = 8;
const int GreenShift = 3;
const int BlueShift = 2;

foreach (var c in foo)
{
    int val = c;
    int r = (val >> RedShift) & RedMask;
    int g = (val >> GreenShift) & GreenMask;
    int b = (val << BlueShift) & BlueMask;
    // now create a color
    Color clr = Color.FromArgb(r, g, b);
    // and do something with it.
}

此代码对每种颜色使用高 5 位(蓝色为 6 位),这将比使用低位提供更多的区别。

没有什么能像我一样强迫你使用 5,5,6。您可以将其设为 5,6,5 或 6,5,5,或 3,8,5,或您想要的任何 r/g/b 组合。您所要做的就是更改班次和偏移量。

也就是说,对于典型的英文文本,颜色会非常相似。你可以做其他有趣的事情,尽管它们需要更多的工作。例如,您可以使蓝色分量为位 0、3、6、9、12 和 15 的组合。绿色为位 1、4、7、10 和 13。红色为位 2、5、 8、11 和 14。这将区分非常接近的字符。

不过,这个想法保持不变:从 Unicode 值中挑选特定位并使用它们来构造红色、绿色和蓝色分量。

【讨论】:

  • 感谢您的建议,但不需要将其转换为 16 位。把它当作24位我没有问题。我需要的是建立一个这样的表
  • 我需要在每一行中建立一个表格,其中有一列用于字符或符号或数字,另一列用于 UNICODE 代码,最后一列用于 1600 万种颜色中的一种
  • @EmanBanysalameh:问题在于 Unicode 代码点是 16 位,但 RGB 颜色是 24 位。因此,您必须扩展 Unicode 代码点中的位。否则,如果您将低字节用于 R,将高字节用于 G,那么您将没有 B。使用我上面显示的代码,您可以轻松地为 65,536 个单字 Unicode 代码点中的每一个创建唯一的 RGB 值。
  • 如果你想覆盖every possible Unicode character,你必须稍微改变一下映射。这变得更加复杂。
  • 是的,这就是我想做的(涵盖所有可能的 Unicode 字符)
猜你喜欢
  • 2013-12-05
  • 2012-07-27
  • 2019-02-08
  • 1970-01-01
  • 2011-05-05
  • 2013-12-10
  • 2011-01-26
  • 2011-01-04
  • 2019-07-06
相关资源
最近更新 更多