1

通常、最も一般的な RGB 形式は 24 ビット RGB (各チャネルに 8 ビット) のようです。ただし、歴史的に、RGB は、3 ビット RGB (チャンネルあたり 1 ビット)、6 ビット RGB (チャンネルあたり 2 ビット)、9 ビット RGB (チャンネルあたり 3 ビット) など、他の多くの形式で表現されてきました。等

N ビット RGB ファイルの N の値が 8 の倍数ではない場合、これらのビットマップは通常、メモリ内でどのように表現されるでしょうか? たとえば、6 ビットの RGB がある場合、各ピクセルは 6 ビットであることを意味するため、最新のコンピューターではビット演算を使用しないと各ピクセルを直接アドレス指定できません。

では、N ビットの RGB ファイルを、各ピクセルがアドレス指定可能なサイズのビットマップに単純に変換する (たとえば、6 ビットを 8 ビットに変換する) のはよくあることですか? それとも、ピクセル サイズがアドレス指定できないビットマップを操作するために、単純にビット演算を使用する方が一般的ですか?

ディスクストレージはどうですか?ビットマップの最後のバイトに完全なピクセルが含まれていない可能性がある場合、ディスクに保存されている 6 ビット RGB ファイルはどのようになっているのでしょうか?

4

2 に答える 2

0

考古学的発掘で申し訳ありませんが、私には良い答えがないので、抵抗できませんでした.

昔、メモリはコンピュータの最も高価な部品でした。最近のメモリは非常に安価であるため、最新のハードウェアで N ビット チャネル イメージを処理する最も賢明な方法は、すべてのチャネルを API またはハードウェアに適合するビット数 (通常は 8 ビット) に拡張することです。

最近ではディスク容量も安価になっているため、ファイルについても同じことができます。(そして、そこにある多くの圧縮ファイル形式のいずれかを使用できます。)

とはいえ、これらのフォーマットが一般的だった昔のやり方は次のとおりです。

ピクセルあたりの総ビット数は 8 の倍数ではありませんでしたが、スキャン ラインあたりのピクセル数は常に 8 の倍数でした。この場合、スキャン ラインを「一度に少しずつ」格納することができ、メモリを無駄にすることはありません。バイト単位で格納する場合のスペース。

したがって、ピクセルが 9 ビット/ピクセルで、スキャン ラインが 320 ピクセルの場合、各ピクセルのビット #0 を含む 320/8 = 40 バイトがあり、その後にすべてのビット #1 などを含む 40 バイトが続きます。ビット #8。したがって、スキャン ラインのすべてのピクセル情報は正確に 360 バイトになります。

ビデオ チップは、メモリへのハードウェア配線が異なるため、そのようなスキャン ラインのレンダリングは高速でした。実際、これは可変量のビット/ピクセル ハードウェア サポートを実装する最も簡単な方法です。N 個のアドレスから一度にビットをプルすることです。

このメソッドは、使用するビットの総数に基づいて、スキャンラインでピクセル番号 X のビットを見つけるために必要な「ビットシフト」の量を変更しないことに注意してください。一度に読み取るアドレスが少なくなります。

于 2014-03-17T17:23:39.343 に答える