5.10. Bit düzeyi işlemler

Önceki sayfadaki aritmetik işlemler piksel değerleri üzerinde çalışır – tam sayı parlaklıkları veya paketlenmiş renk sözcükleri. Bit düzeyi işlemler bir seviye daha aşağıda, bu değerlerin içindeki tek tek bitler üzerinde çalışır. Her pikselin yalnızca tek bir bit olduğu ikili görüntüler için bit düzeyi işlemler doğal aritmetiktir.

5.10.1. Bit düzeyi ailesi

Image sınıfı, iki-girdili bit düzeyi işlemlerinin tam kümesini sunar:

Her biri, her iki görüntünün arabelleğinin her baytında bit-başına çalışır. Her baytın sekiz piksel tuttuğu bir ikili görüntüde, işlem işlenen bayt başına sekiz piksel üzerinde çalışır. Gri tonlamalı veya renkli bir görüntüde ise her kanalın her biti üzerinde çalışır.

Yan yana AND, OR ve XOR işlemleri için üç doğruluk tablosu. Her tablonun 0-0, 0-1, 1-0, 1-1 girdi kombinasyonları için dört satırı ve A, B ve sonuç olarak etiketlenmiş sütunları vardır. Doğruluk tablolarının altında, A ve B ikili görüntüleri siyah ve beyaz hücrelerden oluşan ızgaralar olarak çizilmiştir; bunların AND sonucu sağda, yalnızca her ikisinde de beyaz olan hücreleri tutan bir ızgara olarak gösterilmiştir.

Üstte: AND, OR ve XOR doğruluk tabloları – her işlemin bit düzeyi anlambilimi. Altta: A ve B ikili görüntüleri ve A.b_and(B) sonucu; burada sonuç yalnızca her iki girdide de açık olan konumları tutar.

5.10.2. Maskeleri birleştirme

Bu işlemlerin tek en yaygın kullanımı maskeleri birleştirmektir. Maske, konum konum bir koşulun karşılanıp karşılanmadığını söyleyen bir ikili görüntüdür. Farklı koşulları tanımlayan iki maske, bit düzeyi işlemlerinden biri aracılığıyla bileşik bir koşulu tanımlayan tek bir maskede birleşir:

b_and(), konumları yalnızca her iki girdi maskesinin de o konumda açık olduğunda açık olan bir maske üretir – iki koşulun doğal “ve” işlemi. Bir ön plan maskesini bir eşikleme geçişinin çıktısıyla b_and aracılığıyla birleştirmek, eşiğin eşleşmelerini ön planla sınırlar.

b_or(), konumları girdi maskelerinden herhangi biri açık olduğunda açık olan bir maske üretir – doğal “veya”. İki eşiklenmiş çıktıyı OR’lamak, iki renk aralığından herhangi biriyle eşleşen her şeyi kapsayan tek bir maske üretir.

b_xor(), konumları girdi maskelerinden tam olarak biri açık olduğunda açık olan bir maske üretir. İki maskenin uyuşmadığı konumları tespit etmek için yararlıdır – eşik çıktısının iki çerçeve arasında değiştiği konumlar, iki referans maske arasındaki simetrik fark, bu tür şeyler.

Olumsuzlanmış varyantlar – b_nand(), b_nor(), b_xnor() – olumsuzlanmamış karşılıklarının tümleyenini üretir. Bir koşulu tanımlamanın doğal yolunun “bunların hiçbiri” veya “her ikisi değil” olduğu durumlarda yararlıdırlar – yaygın değildir, ama olumsuzlamanın bir AND’i ayrı bir invert() ile takip ederek oluşturulmasına gerek kalmaması için var olduklarını bilmek değerlidir.

5.10.3. İkili olmayan görüntülerde bit düzeyi işlemler

Bit düzeyi işlemler gri tonlamalı ve renkli görüntülerde de çalışır. Görüntü ikili-benzeri içerik tuttuğunda orada en yararlıdırlar – pikselleri tümüyle 0 veya 255 olan gri tonlamalı bir çerçeve, yalnızca tam-siyah ve tam-beyaz piksellere sahip bir RGB565 çerçeve – burada AND, OR ve XOR, gerçek bir ikili görüntüde verecekleri kombinasyonların aynısını verir. Tüm değer aralığını kapsayan görüntüler için genellikle önceki sayfadaki aritmetik işlemler daha uygundur.