HTML十六进制颜色用6位数字编写(3个字节,一个所谓的十六进制三重奏)。Amiga的颜色寄存器使用一个字(2字节,16位)来定义颜色.
示例:
必须有某种算法(或/和)一些工具来转换HTML-颜色和Amiga颜色寄存器之间的一个简单的方式?或者?(请帮助:)
发布于 2013-04-02 20:24:49
主要是关于弗洛里斯的回答,我被引导在堆叠溢出之外的正确轨道上。摘要和转换:
Amiga有一些不同的图形模式,特别是12位(称为OCS)和24位(称为AGA)等图形模式。为了转换为AGA/24位,什么都不需要做。为了转换为OCS/12位,我们需要减少值。
一种快速的方法是为每个RGB组件削减4个LSB,就像Floris建议的那样,0RGB =#rrgb.
或者另一种更精确的方法:
24位RGB颜色分量值从0到255(即.RGB(255,255,0)等等。HTML-十六进制也是24位.12位RGB颜色组件的值在0-15范围内.
将24位RGB颜色转换为12位,并保留整数部分,对24位R、G和B组件执行以下操作:
downSizedColor = colToDownSize * maxOfRangeToDownConvertTo / maxOfRangeToDownConvertFrom
maxOfRangeToDownConvertTo = 15 (12位最大范围)
maxOfRangeToDownConvertFrom = 255 (24位最大范围)
对于RGB(200,143,96),第一个RGB组件(200)将是downSized RGB-color 11 *11=200*15 / 255*。
从12位恢复到24位
upSizedColor = maxOfRangeToDownConvertFrom / maxOfRangeToDownConvertTo * colToUpSize
实例187=255/15*11
有一些非常好的面向复古的解释这里和这里来做这件事,而且他们得到了一个在线的颜色位深度还原器。强烈推荐!
注意:EAB也有一些信息。谢谢大家的帮助!管理员们,即使我把这作为正确的答案,也可以自由地给弗洛里斯分,因为它引导我走上正确的轨道,谢谢。
发布于 2013-04-01 21:31:43
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我希望这能帮到你。
发布于 2013-04-03 11:22:49
这取决于您要在何处使用该值、直接硬件访问或graphics.library。
对于直接硬件访问或graphics.library -> setRGB4 4/loadRGB4 4,您需要将其转换为16位字,其中位15-12是不关心的: xRGB (每个咬4位)。只需丢弃HTML十六进制值的每一个秒数即可。
对于graphics.library (version >=39) -> setRGB32 32/loadRGB32 32,您需要3x32位,并将MSB调整到左侧(位31)。这意味着,您将HTML值拆分为R、G和B(各有2个数字),并在右边放置6个零。
HTML:#123456 setRGB32:#$12000000 #$34000000 #$56000000
对于直接访问AA颜色寄存器的硬件,只需搜索它。这太复杂了,因为只有32个12位的颜色寄存器和通过控制寄存器的银行切换来选择银行和下/上半部分。
https://stackoverflow.com/questions/15752101
复制相似问题