2017-11-30 2 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

'&'는 비트와 연산자입니다. '>>'는 비트 오른쪽 시프트 연산자입니다. 그것들은 간단한 검색으로 찾을 수있는 [here here] (https://wiki.python.org/moin/BitwiseOperators)입니다. – mhawke

답변

0

BitwiseOperatorsWhat are bitwise shift (bit-shift) operators and how do they work? 참조하십시오.

게시 한 코드에서에는 24 비트의 색상 정보가 포함되어 있습니다 : 빨간색의 경우 8 비트, 녹색의 경우 8 비트, 파란색의 경우 8 비트, 가장 왼쪽의 8 비트에 빨간색 데이터가있는 녹색 데이터 가운데 8 비트에는 파란색 데이터가, 가장 오른쪽에는 8 비트가됩니다.

r는 빨간색 값에 대한 비트입니다 0brrrrrrrrggggggggbbbbbbbb 같은 RGB 모양의 비트를 상상해 g 녹색 값에 대한 비트이며, b는 파란색 값에 대한 비트입니다.

이진수 인 2550b11111111 (8 세트 비트)입니다.

0brrrrrrrrggggggggbbbbbbbb >> 8 녹색에 대한 비트는 현재 가장 왼쪽 얼마나 0b00000000rrrrrrrrgggggggg

참고 산출 :

colorGreen = (RGB >> 8) & 255>> (우측 시프트) 및 & (비트 단위)를 사용하여 녹색 나타내는 가운데 8 비트가 추출되고 8 비트. 그러나 빨간색 비트는 여전히 존재합니다.

0b00000000rrrrrrrrgggggggg & 0b00000000000000001111111 녹색 만 비트가 얼마나 남아 있는지 0b0000000000000000gggggggg

주를 산출한다.

편집 : 이것은 단순화 된 것입니다. 파이썬에서 >>은 논리 시프트가 아니라 산술 시프트입니다. 산술 쉬프트는 부호를 보존합니다. 자세한 설명은 What are bitwise shift (bit-shift) operators and how do they work?을 참조하십시오.

+0

고맙습니다.이 사실을 이해하려고 애 쓰고 있습니다. –