首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将十六进制HTML-颜色转换为Amiga颜色寄存器十六进制(和背面)

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

Stack Overflow用户
提问于 2013-04-01 21:20:32
回答 3查看 1.3K关注 0票数 4

HTML十六进制颜色用6位数字编写(3个字节,一个所谓的十六进制三重奏)。Amiga的颜色寄存器使用一个字(2字节,16位)来定义颜色.

示例:

  • 黄色- HTML十六进制#FFFF00 00
  • 黄色- Amiga颜色寄存器$0FF0

必须有某种算法(或/和)一些工具来转换HTML-颜色和Amiga颜色寄存器之间的一个简单的方式?或者?(请帮助:)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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也有一些信息。谢谢大家的帮助!管理员们,即使我把这作为正确的答案,也可以自由地给弗洛里斯分,因为它引导我走上正确的轨道,谢谢。

票数 2
EN

Stack Overflow用户

发布于 2013-04-01 21:31:43

RGB说,每个R、G和B只使用4位。

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

在你的例子中:

代码语言:javascript
复制
R = 0xFF
G = 0xFF
B = 0xF0

取上半部分(上面粗体):

代码语言:javascript
复制
AmigaRGB = ((R & 0xF0) << 4) + (G & 0xF0) + ( B >> 4 )

这确实会导致0x0FF0

朝另一个方向走:

代码语言:javascript
复制
R = AmigaRGB & (0x0F00) >> 4
G = AmigaRGB & (0x00F0)
B = AmigaRGB & (0x000F) << 4

如果你想要花哨,你可以加上一些四舍五入,抖动等。

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

代码语言:javascript
复制
HTML_RGB = R<<16 + G<<8 + B

我希望这能帮到你。

票数 6
EN

Stack Overflow用户

发布于 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位的颜色寄存器和通过控制寄存器的银行切换来选择银行和下/上半部分。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15752101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档