2013-04-01 140 views
3

HTML十六進制顏色用6位數字(3個字節,即所謂的A十六進制三元組)編寫。 Amiga的顏色寄存器需要一個定義顏色的單詞(2個字節,16位)。將十六進制HTML顏色轉換爲Amiga colorregister十六進制(和後面)

例子:

  • 黃色 - HTML十六進制#FFFF00
  • 黃色 - Amiga的顏色寄存器$ 0FF0

必須有某種算法(或/和)一些工具在簡單的方式之間轉換HTML顏色和Amiga色域寄存器?還是......請幫助:)

+0

你想要像http://www.symbolengine.com/amiguide/ http://www.unsatisfactorysoftware.co.uk/index.php?pg=guideml –

+0

不是amiga顏色4bit-per-通道如此4位阿爾法,4位紅色,4位綠色,4位藍色? –

+1

供參考:[IFF ILBM圖形格式](http://en.wikipedia.org/wiki/ILBM),[HAM圖形模式](http://en.wikipedia.org/wiki/Hold-And-Modify )。請記住,不同的Amiga型號具有不同的圖形功能,所以沒有固定的Amiga顏色格式;希望我給出的鏈接將有所幫助,但理想情況下,您需要更多地解釋您希望獲得更多幫助的格式。 – Spudley

回答

2

主要是關於弗洛里斯的回答,我被引導到了正確的軌道外面的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位maxrange)

例 爲RGB(200,143,96)的第一RGB分量(200)將被小型化RGB色11 * 11 = 200 *255分之15*

從12-恢復到24位位

upSizedColor = maxOfRangeToDownConvertFrom/maxOfRangeToDownConvertTo * colToUpSize

例 187 = 255/15 * 11

有一些非常好的面向復古的解釋herehere做這個東西,再加上他們得到了一個在線顏色位深度減少。強烈推薦!

注:EAB也有一些信息。感謝所有幫助!管理員,即使我把這個設置爲正確的答案,隨時給弗洛里斯點,因爲它導致我在正確的軌道上,謝謝。

+1

感謝道具 - 不用擔心「點」。將最好的答案(適用於你的答案)標記爲「正確」更爲重要,因爲隨着時間的推移,SO數據庫變得更有價值。因此,請將您的答案標記爲最好(帶複選標記)。很高興我能指出你正確的方向! – Floris

+0

謝謝,不久也會有更多的68xxxx彙編相關問題:) – Beamie

4

http://en.wikipedia.org/wiki/List_of_monochrome_and_RGB_palettes#12-bit_RGB說有用於每個R,G的只有4位,和B.

換句話說 - 我懷疑,如果你把上半每個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 

我希望這有助於。

3

這取決於你想使用的值,直接硬件訪問或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:#$ 1200多萬,#$ 3400萬,#$ 5600萬

對於直接訪問硬件的AA-顏色寄存器,它只是谷歌。它的操作複雜,因爲只有32個12位顏色寄存器和通過控制寄存器選擇bank和lower/upper half的bank-switching。

相關問題