[英]Converting hexadecimal HTML-color to Amiga colorregister hex (and back)
HTML十六進制顏色用6位數字寫成(3個字節,一個所謂的A hex三元組)。 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。
對於直接硬件訪問或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顏色寄存器,只需google它。 它該死的很復雜,因為只有32個12位顏色寄存器和通過控制寄存器進行存儲體切換來選擇存儲體和下半部/上半部。
大多數情況下,對於Floris的回答,我是在stackoverflow之外的正確軌道上領導的。 摘要和轉換:
Amiga有一些不同的圖形模式,特別是12位(稱為OCS)和24位(稱為AGA)等。 要轉換為AGA / 24位,不需要做任何事情。 要轉換為OCS / 12位,我們需要減少值。
一種快速的方法是為每個RGB組件削減4 LSB,就像Floris建議的那樣0RGB = #RRGGBB。
或者其他方式,更精確一點:
24位RGB顏色分量值的范圍為0-255(即RGB(255,255,0)),依此類推。 HTML-hex也是24位的。 12位RGB顏色分量的值范圍為0-15。
要將24位RGB顏色轉換為12位並保持整數部分,請為每個24位R,G和B組件執行此操作:
downSizedColor = colToDownSize * maxOfRangeToDownConvertTo / maxOfRangeToDownConvertFrom
maxOfRangeToDownConvertTo = 15(12位maxrange)
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
有一些非常優秀的面向復古解釋這里和這里做這個東西,再加上他們得到了一個在線色彩位深度減速。 強烈推薦!
注意: EAB也有一些信息。 謝謝大家的幫助! 管理員,即使我把它設置為正確的答案,隨意給予Floris積分,因為它帶領我走上了正確的軌道,謝謝。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.