侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

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

2022-06-30 星期四 / 0 评论 / 0 点赞 / 72 阅读 / 1505 字

什么是最有效的方法来做到这一点?解决方法 真正的答案:取决于你正在寻找什么样的十六进制颜色值(例如565,555,888,8888等),alpha位的数量,实际的颜色分布(rgb vs bgr …)和

...什么是最有效的方法来做到这一点?.

解决方法

. 真正的答案:取决于你正在寻找什么样的十六进制颜色值(例如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};};
. ..

广告 广告

评论区