5.10. การดำเนินการแบบบิตไวส์

การดำเนินการทางคณิตศาสตร์ในหน้าก่อนหน้าทำงานบน ค่า พิกเซล -- ความสว่างของจำนวนเต็มหรือคำสีที่แพ็กไว้ การดำเนินการ แบบบิตไวส์ ทำงานในระดับที่ต่ำกว่าหนึ่งระดับ บนบิตแต่ละตัวภายในค่าเหล่านั้น สำหรับภาพ ไบนารี ที่แต่ละพิกเซลเป็นเพียงหนึ่งบิต การดำเนินการแบบบิตไวส์คือคณิตศาสตร์ที่เป็นธรรมชาติ

5.10.1. กลุ่มบิตไวส์

คลาส Image เปิดเผยชุดการดำเนินการแบบบิตไวส์สองอินพุตครบชุด:

  • b_and() -- AND แบบบิตไวส์

  • b_or() -- OR แบบบิตไวส์

  • b_xor() -- XOR แบบเอกสิทธิ์บิตไวส์

  • b_nand() -- NOT-AND

  • b_nor() -- NOT-OR

  • b_xnor() -- NOT-XOR

แต่ละตัวทำงานต่อบิตบนทุกไบต์ของบัฟเฟอร์ทั้งสองภาพ บนภาพไบนารีที่แต่ละไบต์มีแปดพิกเซล การดำเนินการทำงานบนแปดพิกเซลต่อไบต์ที่ประมวลผล บนภาพระดับสีเทาหรือสีจะทำงานบนทุกบิตของทุกช่อง

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.

บน: ตารางความจริง AND, OR และ XOR -- ความหมายระดับบิตของแต่ละการดำเนินการ ล่าง: ภาพไบนารีสอง A และ B และผลของ A.b_and(B) ที่ผลลัพธ์เก็บเฉพาะตำแหน่งที่เปิดอยู่ในทั้งสองอินพุต

5.10.2. การรวมมาสก์

การใช้งานที่พบบ่อยที่สุดของการดำเนินการเหล่านี้คือ การรวมมาสก์ มาสก์คือภาพไบนารีที่บอกตำแหน่งต่อตำแหน่งว่าเงื่อนไขบางอย่างเป็นจริงหรือไม่ มาสก์สองอันที่อธิบายเงื่อนไขต่างกันรวมกันเป็นมาสก์เดียวที่อธิบายเงื่อนไขผสมผ่านการดำเนินการแบบบิตไวส์อย่างใดอย่างหนึ่ง:

b_and() สร้างมาสก์ที่ตำแหน่งเปิดเฉพาะเมื่อ ทั้งสอง มาสก์อินพุตเปิดที่ตำแหน่งนั้น -- "และ" ของสองเงื่อนไขตามธรรมชาติ การรวมมาสก์พื้นหน้ากับเอาต์พุตของการผ่านค่าขีดแบ่งผ่าน b_and จำกัดการจับคู่ค่าขีดแบ่งให้อยู่ในพื้นหน้า

b_or() สร้างมาสก์ที่ตำแหน่งเปิดเมื่อ อย่างใดอย่างหนึ่ง ของมาสก์อินพุตเปิด -- "หรือ" ตามธรรมชาติ การ OR เอาต์พุตที่ผ่านค่าขีดแบ่งสองอย่างเข้าด้วยกันสร้างมาสก์เดียวที่ครอบคลุมทุกสิ่งที่ตรงกับช่วงสีใดช่วงหนึ่งจากสองช่วง

b_xor() สร้างมาสก์ที่ตำแหน่งเปิดเมื่อ มาสก์อินพุตเดียวกันพอดีหนึ่งอัน เปิดอยู่ มีประโยชน์สำหรับการตรวจจับตำแหน่งที่สองมาสก์ ไม่ตรงกัน -- ตำแหน่งที่เอาต์พุตค่าขีดแบ่งเปลี่ยนแปลงระหว่างสองเฟรม ผลต่างสมมาตรระหว่างมาสก์อ้างอิงสอง รูปแบบประเภทนั้น

ตัวแปรที่นิเสธ -- b_nand(), b_nor(), b_xnor() -- สร้างส่วนเสริมของคู่ที่ไม่นิเสธ มีประโยชน์เมื่อวิธีธรรมชาติในการอธิบายเงื่อนไขคือ "ไม่ใช่ทั้งคู่" หรือ "ไม่ใช่ทั้งสอง" -- ไม่บ่อย แต่ควรรู้ว่ามีอยู่เพื่อที่การนิเสธไม่ต้องถูกประกอบโดยการตามหลัง AND ด้วย invert() แยกต่างหาก

5.10.3. บิตไวส์บนภาพที่ไม่ใช่ไบนารี

การดำเนินการแบบบิตไวส์ยังทำงานบนภาพระดับสีเทาและสีด้วย มีประโยชน์ที่สุดในกรณีนั้นเมื่อภาพมีเนื้อหาคล้ายไบนารี -- เฟรมระดับสีเทาที่พิกเซลทั้งหมดเป็น 0 หรือ 255 เฟรม RGB565 ที่มีเฉพาะพิกเซลดำสนิทและขาวสนิท -- ที่ AND, OR และ XOR ให้การรวมกันเหมือนกับที่ให้บนภาพไบนารีแท้ สำหรับภาพที่ครอบคลุมช่วงค่าเต็ม การดำเนินการทางคณิตศาสตร์ในหน้าก่อนหน้ามักเหมาะสมกว่า