Số 124 dưới dạng byte nhị phân (tám chữ số) là 01111100. Để biểu diễn một bộ ba RGB gồm ba byte sẽ cần ba lần tám hoặc 24, các bit như vậy. Theo mặc định, r.composite
giảm điều này xuống chỉ còn 15 bit bằng cách loại bỏ các bit ít quan trọng nhất trong mỗi băng tần. Do đó, nó cắt 01111100 thành 01111, tức là 15. (Tương đương, nó chia 124 cho 8 và bỏ qua phần còn lại.) Rõ ràng ba kết quả năm bit này được nối theo thứ tự B, G, R để tạo thành một số 15 bit (biểu thị các giá trị trong khoảng từ 0 đến 2 ^ 15-1 = 32767, đủ nhỏ để giữ bảng màu ở kích thước có thể quản lý được). Do đó, các giá trị này đại diện cho ba dải hình ảnh, mỗi dải chỉ có năm bit chính xác thay vì tám dải gốc.
Trong ví dụ của câu hỏi, các tính toán tiến hành như sau:
Blue = 124 được chuyển đổi thành 124/8 = 15 (cộng với phần còn lại bị bỏ qua là 4). Trong nhị phân này là 01111.
Màu xanh lá cây = 124 được chuyển đổi thành 124/8 = 15 (cộng với phần còn lại bị bỏ quên là 4). Trong nhị phân này là 01111.
Red = 172 được chuyển đổi thành 172/8 = 21 (cộng với phần còn lại bị bỏ qua là 4). Trong nhị phân, đây là 10101.
Các chữ số được ghép thành 01111 01111 10101. Số nhị phân 15 chữ số này biểu thị giá trị 15861 = (15 * 32 + 15) * 32 + 21.
r.composite
có thể xử lý nhiều hơn thế này và nó có thể thực hiện hơi khác tùy thuộc vào các tùy chọn bạn cung cấp, nhưng các thao tác này cho thấy cách cơ bản trong đó một byte có thể được chuyển đổi thành giá trị năm bit.
Bạn có thể đảo ngược thủ tục bằng cách sử dụng các phép chia liên tiếp bằng 32:
15861/32 = 495 cộng với phần còn lại của 21. (Nhân với 8, phần còn lại của 21 cho 168, chỉ ít hơn một chút so với 172 ban đầu cho dải màu đỏ.)
495/32 = 15 cộng với phần còn lại là 15. (Nhân với 8, phần còn lại của 15 cho 120, chỉ ít hơn một chút so với 124 ban đầu cho dải màu xanh lá cây.)
Chúng tôi còn lại 15, khi nhân với 8 cho 120, chỉ ít hơn một chút so với 124 ban đầu cho dải màu xanh.
Tài liệu tham khảo
r.composite
trang hướng dẫn tại https://grass.osgeo.org/grass72/manuals/r.compoz.html .