首页 > 解决方案 > 将 16 位 RGB 值转换为一个十进制值

问题描述

我设计了一个“ESOLANG”,它使用 16 位颜色和一个精灵编辑器(这篇文章是关于 JS、HTML 的),问题是我尝试使用 r×g×b 转换它,但它只有在值的情况下才有效是32×64×32,我也试过这个

var components = {
    r: (c & 0b1111100000000000) >> 16, 
    g: (c & 0b0000011111100000) >> 8, 
    b: (c & 0b0000000000011111)

但这让我意识到我不擅长位操作,它应该是一个精灵编辑器,可以从文本中加载和保存,就像每行每列 16 位 RGB 作为单个十进制值一样。我什至没有运气在互联网上搜索我需要的答案。其中大部分是大约 24 位颜色,每个颜色通道使用 8 位,而 16 位 RGB 使用 5 个红色通道,6 个绿色通道,因为人眼对绿色和 5 个蓝色通道敏感。它应该适合大约 2 个字节(0xFFFF),但标准方法是我发布的代码但使用十六进制值,在这种情况下不起作用。任何帮助都将不胜感激。编辑:我试过这个,顺便说一句,当解决方案可能比我实际尝试的更简单时,我对寻求帮助感到有点尴尬

 data.value = "";
 for(var x=0;x<16;x++){
  for(var y=0;y<16;y++){
    var components = {
    r: (tile[x][y][0] & 1111100000000000) >> 11, 
    g: (tile[x][y][1] & 0000011111100000) >> 5, 
    b: (tile[x][y][2] & 0000000000011111)
    };
    data.value = data.value + (components.r << 11) + (components.g << 5) + (components.b) + " ";
  }
    data.value = data.value + "\n";
 }
 
}

我使用了 31,63,31(16 位的 WHITE),它应该输出大约 65535,但它输出 009 作为输出。

标签: javascriptcolorsbit-manipulation

解决方案


推荐阅读