HTML十六进制颜色使用6个数字(3个字节,也称为十六进制三元组)表示。Amiga的颜色寄存器使用一个单词(2个字节,16位)来定义颜色。
例如:
- 黄色 - HTML十六进制 #FFFF00
- 黄色 - Amiga颜色寄存器 $0FF0
是否有某种算法和/或工具可以轻松地在HTML颜色和Amiga颜色寄存器之间进行转换?或者还有其他方法吗?...请帮忙:)
HTML十六进制颜色使用6个数字(3个字节,也称为十六进制三元组)表示。Amiga的颜色寄存器使用一个单词(2个字节,16位)来定义颜色。
例如:
是否有某种算法和/或工具可以轻松地在HTML颜色和Amiga颜色寄存器之间进行转换?或者还有其他方法吗?...请帮忙:)
http://en.wikipedia.org/wiki/List_of_monochrome_and_RGB_palettes#12-bit_RGB 上说每个 R、G 和 B 只使用了 4 位。
换句话说,我猜想如果您将每个 16 位十六进制对的前半部分拼接起来,就可以得到 Amiga 颜色。
以您的示例为例:
R = 0xFF
G = 0xFF
B = 0xF0
AmigaRGB = ((R & 0xF0) << 4) + (G & 0xF0) + ( B >> 4 )
这确实会导致0x0FF0
反过来看:
R = AmigaRGB & (0x0F00) >> 4
G = AmigaRGB & (0x00F0)
B = AmigaRGB & (0x000F) << 4
如果您想要更加精细的效果,可以添加一些圆角、抖动等效果。
当然,在 HTML 中使用的最终值为:
HTML_RGB = (R<<16) + (G<<8) + B
这取决于您要在哪里使用值,是直接硬件访问还是图形库。
对于直接硬件访问或使用 graphics.library -> setRGB4/loadRGB4,您需要将其转换为16位字,其中第15-12位是不关心的:xRGB(每个半字节4位)。只需丢弃 HTML 十六进制值的每个第二个数字即可。
对于 graphics.library(版本>=39) -> setRGB32/loadRGB32,您需要 3x32 位,并将 MSB 左移(位 31)。这意味着您需要将 HTML 值拆分为 R、G 和 B(每个2位),并向右填充6个零。
HTML: #123456 setRGB32: #$12000000, #$34000000, #$56000000
对于直接访问 AA 颜色寄存器的硬件访问,只需搜索一下。它非常复杂,因为只有32个12位颜色寄存器,并且需要通过控制寄存器进行银行切换以选择银行和下/上半部分。
maxOfRangeToDownConvertFrom = 255(24位最大范围)
例如,对于RGB(200、143、96),第一个RGB分量(200)将被缩小为RGB颜色11 * 11 = 200 * 15/255。
从12位恢复到24位
upSizedColor = maxOfRangeToDownConvertFrom / maxOfRangeToDownConvertTo * colToUpSize
例如,187 = 255/15 * 11
有一些非常好的面向复古的解释here和here,可以做这些事情,此外还有在线颜色位深度减少器。强烈推荐!
注意:EAB也有一些信息。感谢所有人的帮助!管理员,即使我将其设置为正确答案,请随意给Floris积分,因为它让我走上了正确的轨道,谢谢。