5.10. การดำเนินการแบบบิตไวส์¶
การดำเนินการทางคณิตศาสตร์ในหน้าก่อนหน้าทำงานบน ค่า พิกเซล -- ความสว่างของจำนวนเต็มหรือคำสีที่แพ็กไว้ การดำเนินการ แบบบิตไวส์ ทำงานในระดับที่ต่ำกว่าหนึ่งระดับ บนบิตแต่ละตัวภายในค่าเหล่านั้น สำหรับภาพ ไบนารี ที่แต่ละพิกเซลเป็นเพียงหนึ่งบิต การดำเนินการแบบบิตไวส์คือคณิตศาสตร์ที่เป็นธรรมชาติ
5.10.1. กลุ่มบิตไวส์¶
คลาส Image เปิดเผยชุดการดำเนินการแบบบิตไวส์สองอินพุตครบชุด:
b_and()-- AND แบบบิตไวส์b_or()-- OR แบบบิตไวส์b_xor()-- XOR แบบเอกสิทธิ์บิตไวส์b_nand()-- NOT-ANDb_nor()-- NOT-ORb_xnor()-- NOT-XOR
แต่ละตัวทำงานต่อบิตบนทุกไบต์ของบัฟเฟอร์ทั้งสองภาพ บนภาพไบนารีที่แต่ละไบต์มีแปดพิกเซล การดำเนินการทำงานบนแปดพิกเซลต่อไบต์ที่ประมวลผล บนภาพระดับสีเทาหรือสีจะทำงานบนทุกบิตของทุกช่อง
บน: ตารางความจริง 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 ให้การรวมกันเหมือนกับที่ให้บนภาพไบนารีแท้ สำหรับภาพที่ครอบคลุมช่วงค่าเต็ม การดำเนินการทางคณิตศาสตร์ในหน้าก่อนหน้ามักเหมาะสมกว่า