我需要将 16 位 XRGB1555 转换为 24 位 RGB888。我的函数如下,但它并不完美,即 0b11111 的值将给出 248 作为像素值,而不是 255。此函数适用于小端,但可以轻松修改为大端。
public static Color XRGB1555(byte b0, byte b1)
{
return Color.FromArgb(0xFF, (b1 & 0x7C) << 1, ((b1 & 0x03) << 6) | ((b0 & 0xE0) >> 2), (b0 & 0x1F) << 3);
}
有什么想法可以让它发挥作用吗?
最佳答案
您通常会将最高位复制到最低位,因此如果您有如下五位:
Bit position: 4 3 2 1 0
Bit variable: A B C D E
您可以将其扩展为八位:
Bit position: 7 6 5 4 3 2 1 0
Bit variable: A B C D E A B C
这样,所有的零都保持为所有的零,所有的都变成了所有的,并且两者之间的值适本地缩放。
(请注意,A、B、C 等不应该是十六进制数字 - 它们是代表单个位的变量)。
关于c# - 如何在 C# 中将 RGB555 转换为 RGB888?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4409763/