2010-01-28 38 views
7

Tôi có một màu RGB được lưu trữ dưới dạng uint. Tôi có thể tạo điều này từ các giá trị RGB bằng cách sử dụng bitwise trái và bitwise hoặc toán tử trong một biểu thức như sau:Tách một uint RGB thành các thành phần R G B riêng biệt

colour = r<<16 | g<<8 | b; 

Tôi muốn làm ngược lại. Tôi có số cuối cùng và tôi muốn giá trị r, g và b. Có ai biết cách để làm điều này không?

+0

Cảm ơn tất cả mọi người cho câu trả lời nhanh chóng của bạn. Cả 3 đều chính xác. Tôi đoán bạn đã gõ tất cả cùng một lúc. –

Trả lời

15
r = (colour >> 16) & 0xff; 
g = (colour >> 8) & 0xff; 
b = colour & 0xff; 
7

Something như thế này:

r = (colour >> 16) & 0xFF; 
g = (colour >> 8) & 0xFF; 
b = colour & 0xFF; 

Giả sử giá trị thành phần 8-bit. Mặt nạ bitwise và hex 0xFF chỉ chọn 8 bit cho mỗi thành phần.

5

Bạn sử dụng sự thay đổi, và sau đó các nhà điều hành & để mặt nạ ra bit không mong muốn:

r = color >> 16; 
g = (color >> 8) & 255; 
b = color & 255; 

Hoặc:

b = color & 255; 
color >>= 8; 
g = color & 255; 
r = color >> 8; 
Các vấn đề liên quan