颜色 – 将十六进制颜色转换为RGB,反之亦然

前端之家收集整理的这篇文章主要介绍了颜色 – 将十六进制颜色转换为RGB,反之亦然前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
什么是最有效的方法来做到这一点?

解决方法

真正的答案:取决于你正在寻找什么样的十六进制颜色值(例如565,555,888,8888等),alpha位的数量,实际的颜色分布(rgb vs bgr …)和一吨其他变量。

这里是一个通用的算法,大多数RGB值使用C模板(直接从ScummVM)。

template<class T>
uint32 RGBToColor(uint8 r,uint8 g,uint8 b) {
return T::kAlphaMask |
       (((r << T::kRedShift) >> (8 - T::kRedBits)) & T::kRedMask) |
       (((g << T::kGreenShift) >> (8 - T::kGreenBits)) & T::kGreenMask) |
       (((b << T::kBlueShift) >> (8 - T::kBlueBits)) & T::kBlueMask);
}

这里是565(16位颜色的标准格式)的一个示例颜色结构:

template<>
struct ColorMasks<565> {
enum {
    highBits    = 0xF7DEF7DE,lowBits     = 0x08210821,qhighBits   = 0xE79CE79C,qlowBits    = 0x18631863,kBytesPerPixel = 2,kAlphaBits  = 0,kRedBits    = 5,kGreenBits  = 6,kBlueBits   = 5,kAlphaShift = kRedBits+kGreenBits+kBlueBits,kRedShift   = kGreenBits+kBlueBits,kGreenShift = kBlueBits,kBlueShift  = 0,kAlphaMask = ((1 << kAlphaBits) - 1) << kAlphaShift,kRedMask   = ((1 << kRedBits) - 1) << kRedShift,kGreenMask = ((1 << kGreenBits) - 1) << kGreenShift,kBlueMask  = ((1 << kBlueBits) - 1) << kBlueShift,kRedBlueMask = kRedMask | kBlueMask

};
};

猜你在找的CSS相关文章