将十六进制HTML颜色转换为Amiga颜色寄存器十六进制(和背面)

将十六进制HTML颜色转换为Amiga颜色寄存器十六进制(和背面),html,assembly,hex,68000,amiga,Html,Assembly,Hex,68000,Amiga,HTML十六进制颜色由6位数字(3个字节,即所谓的十六进制三元组)组成。 Amiga的颜色寄存器采用定义颜色的字(2字节,16位) 示例: 黄色-HTML十六进制#FFFF00 黄色-Amiga颜色寄存器$0FF0 必须有某种算法(或/和)一些工具来轻松地在HTML颜色和Amiga颜色寄存器之间进行转换?或请帮助:)说R、G和B的每一位只使用了4位 换句话说,我怀疑如果你把每一个16位十六进制对的上半部分串在一起,你就会得到Amiga的颜色 在您的示例中: R = 0xFF G = 0xFF

HTML十六进制颜色由6位数字(3个字节,即所谓的十六进制三元组)组成。 Amiga的颜色寄存器采用定义颜色的字(2字节,16位)

示例:

  • 黄色-HTML十六进制#FFFF00
  • 黄色-Amiga颜色寄存器$0FF0
必须有某种算法(或/和)一些工具来轻松地在HTML颜色和Amiga颜色寄存器之间进行转换?或请帮助:)

说R、G和B的每一位只使用了4位

换句话说,我怀疑如果你把每一个16位十六进制对的上半部分串在一起,你就会得到Amiga的颜色

在您的示例中:

R = 0xFF
G = 0xFF
B = 0xF0
取上半部分(上面加粗):

如果你想成为一名花花公子,你可以添加一些舍入,抖动等

当然,HTML中使用的最终值是

HTML_RGB = R<<16 + G<<8 + B

HTML_RGB=R主要是关于Floris的回答,我被带到stackoverflow外的正确轨道上。摘要和转换:

Amiga有一些不同的图形模式,特别是12位(称为OCS)和24位(称为AGA)。对于转换为AGA/24位,无需执行任何操作。为了转换为OCS/12位,我们需要减少值

一种快速的方法是为每个RGB组件削减4个LSB,就像Floris建议的那样,因此0RGB=#RRGGBB.

或者另一种方式,更精确一点:

24位RGB颜色分量的值范围为0-255(即RGB(255255,0))等。HTML十六进制也是24位的。 12位RGB颜色分量的值范围为0-15

要将24位RGB颜色转换为12位,只需保留整数部分,请对每24位R、G和B分量执行此操作:

downSizedColor=colToDownSize*maxOfRangeTownConvertTo/maxOfRangeTownConvertFrom

MaxOfRangeTownConvertTo=15(12位maxrange)

MaxOfRangeTownConvertfrom=255(24位maxrange)

范例 对于RGB(20014396),第一个RGB组件(200)将缩小RGB颜色11 *11=200*15/255*

从12位恢复到24位

upSizedColor=MaxOfRangeTownConvertFrom/MaxOfRangeTownConvertTo*colToUpSize

范例 187=255/15*11

有一些非常好的复古导向的解释和做这件事,加上他们有一个在线颜色位深度减缩器。强烈推荐


注:也有一些信息。谢谢大家的帮助!管理员们,即使我将此设置为正确答案,也可以随意给Floris打分,因为这给了我正确的答案,谢谢。

这取决于您希望在哪里使用值、直接硬件访问或graphics.library

对于直接硬件访问或graphics.library->setRGB4/loadRGB4,您需要转换为16位字,其中位15-12不重要:xRGB(每个半字节4位)。只需扔掉HTML十六进制值的第二个数字

对于graphics.library(版本>=39)->setRGB32/loadRGB32,需要3x32位,并将MSB调整到左侧(位31)。这意味着您将HTML值拆分为R、G和B(每个2个数字),并在右侧填充六个零

HTML:#123456 setRGB32:#12000000美元#34000000美元#56000000美元


要直接访问AA颜色寄存器,只需谷歌一下。这太复杂了,因为只有32个12位颜色寄存器和通过控制寄存器切换的存储组来选择存储组和下/上半部分。

您是否希望像amiga不是每个通道4位颜色那样4位alpha、4位红色、4位绿色、4位蓝色?请参考:。请记住,不同的Amiga型号具有不同的图形功能,因此没有固定的Amiga颜色格式;希望我提供的链接会有所帮助,但理想情况下,你需要更多地解释你的目标格式,以获得更多帮助。感谢道具-不要担心“分数”。更重要的是,您要将最佳答案(适合您的答案)标记为“正确”,因为随着时间的推移,SO数据库将变得更有价值。因此,请将您的答案标记为最佳(打勾)。很高兴我能为你指出正确的方向!谢谢,很快还会有更多与此相关的问题:)
R = AmigaRGB & (0x0F00) >> 4
G = AmigaRGB & (0x00F0)
B = AmigaRGB & (0x000F) << 4
HTML_RGB = R<<16 + G<<8 + B