5.10. Các phép tính bitwise

Các phép tính số học trên trang trước hoạt động trên giá trị điểm ảnh -- độ sáng nguyên hoặc các từ màu đóng gói. Các phép tính bitwise hoạt động ở cấp độ thấp hơn một bậc, trên các bit riêng lẻ bên trong các giá trị đó. Đối với ảnh nhị phân, nơi mỗi điểm ảnh chỉ là một bit, các phép tính bitwise là phép tính số học tự nhiên.

5.10.1. Họ phép tính bitwise

Lớp Image cung cấp đầy đủ các phép tính bitwise hai đầu vào:

Mỗi phép tính hoạt động theo từng bit trên mỗi byte của bộ đệm của cả hai ảnh. Trên một ảnh nhị phân, nơi mỗi byte chứa tám điểm ảnh, phép tính chạy trên tám điểm ảnh trên mỗi byte được xử lý. Trên ảnh thang xám hoặc ảnh màu sắc, nó chạy trên mỗi bit của mỗi kênh.

Three truth tables for the AND, OR, and XOR operations side by side. Each table has four rows for the input combinations 0-0, 0-1, 1-0, 1-1 and columns labelled A, B, and result. Below the truth tables, two small binary images A and B are drawn as grids of black and white cells, with the result of ANDing them shown to the right as a grid that keeps only the cells that were white in both.

Trên cùng: các bảng chân lý AND, OR và XOR -- ngữ nghĩa cấp bit của mỗi phép tính. Phía dưới: hai ảnh nhị phân A và B và kết quả của A.b_and(B), trong đó kết quả chỉ giữ lại các vị trí bật trong cả hai đầu vào.

5.10.2. Kết hợp các mặt nạ

Cách sử dụng phổ biến nhất của các phép tính này là kết hợp các mặt nạ. Một mặt nạ là một ảnh nhị phân cho biết, theo từng vị trí, liệu một điều kiện nào đó có được thỏa mãn không. Hai mặt nạ mô tả các điều kiện khác nhau kết hợp thành một mặt nạ duy nhất mô tả điều kiện phức hợp thông qua một trong các phép tính bitwise:

b_and() tạo ra một mặt nạ mà các vị trí của nó chỉ bật khi cả hai mặt nạ đầu vào đều bật tại vị trí đó -- "and" tự nhiên của hai điều kiện. Kết hợp mặt nạ tiền cảnh với đầu ra của một bước ngưỡng qua b_and giới hạn các kết quả khớp của ngưỡng vào tiền cảnh.

b_or() tạo ra một mặt nạ mà các vị trí của nó bật bất cứ khi nào một trong hai mặt nạ đầu vào bật -- "or" tự nhiên. OR hai đầu ra đã ngưỡng với nhau tạo ra một mặt nạ duy nhất bao phủ bất cứ thứ gì khớp với một trong hai phạm vi màu sắc.

b_xor() tạo ra một mặt nạ mà các vị trí của nó bật bất cứ khi nào chính xác một mặt nạ đầu vào bật. Hữu ích để phát hiện các vị trí mà hai mặt nạ không đồng nhất -- các vị trí mà đầu ra ngưỡng thay đổi giữa hai khung hình, sự khác biệt đối xứng giữa hai mặt nạ tham chiếu, kiểu đó.

Các biến thể phủ định -- b_nand(), b_nor(), b_xnor() -- tạo ra phần bổ sung của các đối tác không phủ định của chúng. Chúng hữu ích khi cách tự nhiên để mô tả một điều kiện là "không cái nào trong số này" hoặc "không phải cả hai" -- không phổ biến, nhưng đáng biết rằng chúng tồn tại để phủ định không phải được tổng hợp bằng cách theo AND với một invert() riêng biệt.

5.10.3. Bitwise trên ảnh không nhị phân

Các phép tính bitwise cũng chạy trên ảnh thang xám và ảnh màu sắc. Chúng hữu ích nhất ở đó khi ảnh chứa nội dung kiểu nhị phân -- một khung hình thang xám mà các điểm ảnh của nó đều là 0 hoặc 255, một khung hình RGB565 chỉ có các điểm ảnh đen hoàn toàn và trắng hoàn toàn -- nơi AND, OR và XOR cho các kết hợp giống như trên ảnh nhị phân thực sự. Đối với các ảnh trải dài toàn bộ phạm vi giá trị, các phép tính số học trên trang trước thường phù hợp hơn.