2017-11-30 25 views
-1

私は検索する色の合計に応じてRGB色のリストを取得する方法を探していたので、このコードを見つけました。私は理解できない部分があります。 ">>"演算子と "&"演算子がビット演算子であるが、それらが何をしているのかを完全に理解することはできません。RGBの色を取得する

色の値が に割り当てられている部分の理解を手伝ってもらえますか?

def getDinstinctRGBColorsList(desiredColors) 
    availableColors = 16000000 
    inc = availableColors/desiredColors 
    colorsList = {} 
    RGB = 0 
    count = 0 
    while count <= desiredColors: 
     RGB = RGB+inc 
     colorBlue = RGB & 255 
     colorGreen = (RGB >> 8) & 255 
     colorRed = (RGB >> 16) & 255 
     colorsList[count] = str(colorRed) + "," + str(colorGreen) + "," + str(colorBlue) 
     count += 1 
    return colorsList 
+0

'&'はビット単位で演算子です。 '>>'はビット単位の右シフト演算子です。これらは両方とも簡単な検索で見つけることができる[ここに文書化されています](https://wiki.python.org/moin/BitwiseOperators)です。 – mhawke

答えて

0

およびWhat are bitwise shift (bit-shift) operators and how do they work?を参照してください。

投稿コードからは、24ビットの色情報が含まれているように見えます。赤色は8ビット、緑色は8ビット、青色は8ビット、赤色のデータは左端の8ビットです。緑色のデータ中央の8ビットに、青色のデータを右端の8ビットに格納します。

gは緑色値のためのビットであり、そしてb青色値のためのビットであり、rは赤の値のビットである0brrrrrrrrggggggggbbbbbbbbRGB外観のビットを想像します。

バイナリで2550b11111111(8個の設定ビット)であることに注意してください。

colorGreen = (RGB >> 8) & 255>>(右シフト)を使用して緑色表す中間8ビットを抽出し、&(ビット単位とされる):

0brrrrrrrrggggggggbbbbbbbb >> 8は、緑色用のビットが今一番左あるか0b00000000rrrrrrrrgggggggg

注意をもたらします8ビット。しかし、赤のビットはまだ存在しています。

0b00000000rrrrrrrrgggggggg & 0b00000000000000001111111は緑のためのビットのみが残っているか0b0000000000000000gggggggg

注意を与えます。

編集:これは簡単です。 Pythonでは、>>は論理シフトではなく、算術シフトです。算術シフトは符号を保持します。詳細については、What are bitwise shift (bit-shift) operators and how do they work?を参照してください。

+0

ありがとうございましたこれを理解しようとしている間、私は頭痛を受けていました。 –

関連する問題