首页 > 解决方案 > 为每像素 C# 加入 16 位颜色

问题描述

我有一个问题,我有一种颜色(RGB),每种颜色用 16 位分隔,我想加入 64 位,例如:

R = 0x2222
G = 0xb1b1
B = 0x4c4c
A = 0x0000

如何将其转换为单个数据?

标签: c#

解决方案


这有点重复这个问题,但它确实有一个独特的事情让你感到困惑,因为否则你会左移超过 32 位,而 C# 莫名其妙地只服从移位量中较低的 5 或 6 位。因此,结合这两个事实:

void Main()
{
    ushort r = 0x2222;
    ushort g = 0xb1b1;
    ushort b = 0x4c4c;
    ushort a = 0x0000;
    
    ulong rgba = r;
    rgba = rgba << 16; // each component is 16 bits long
    rgba = rgba | g;
    rgba = rgba << 16; 
    rgba = rgba | b; 
    rgba = rgba << 16; 
    rgba = rgba | a;
    
    Console.WriteLine($"{rgba:X}");
}

推荐阅读