4

HTML の 16 進数の色は 6 桁 (3 バイト、いわゆる 16 進トリプレット) で記述されます。Amiga のカラー レジスタは、色を定義するワード (2 バイト、16 ビット) を取ります。

例:

  • 黄 - HTML 16 進数 #FFFF00
  • 黄 - Amiga カラー レジスタ $0FF0

HTMLカラーとAmigaカラーレジスタを簡単に変換するための何らかのアルゴリズム(または/および)ツールが必要ですか? それとも?...助けてください:)

4

3 に答える 3

6

http://en.wikipedia.org/wiki/List_of_monochrome_and_RGB_palettes#12-bit_RGBによると、R、G、B のそれぞれに使用されるビットは 4 ビットだけです。

言い換えれば、16 ビットの各 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-01T21:31:43.933 に答える
2

主にフローリスの回答に関して、私はstackoverflowの外の正しい道に導かれました。要約と変換:

Amiga にはいくつかの異なるグラフィック モードがあり、特に 12 ビット (OCS と呼ばれる) と 24 ビット (AGA と呼ばれる) があります。AGA/24 ビットへの変換には、何もする必要はありません。OCS/12 ビットに変換するには、値を減らす必要があります。

1 つの簡単な方法は、Floris が提案したように、 0RGB = #RRGGBBのように、RGB コンポーネントごとに 4 LSB をカットすることです。

または別の方法で、もう少し正確に:

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 ビットの最大範囲)

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-02T20:24:49.057 に答える