špatně.
- máš pole bitů o délce 256bit tj. 32byte, klidně reprezentované nějakým polem booleanů (podle toho co tvůj jazyk umí a podporuje - technicky to lze realizovat i jako 4xbyte nebo 2xinteger - jen budeš muset provést binární konverzi pořadí barvy a dohledání správného bitu ve správné pozici ve vyšším ordinálním typu napříč třemi dimenzemi).
- složky jakékoli barvy mají v RGB 3x256hodnot, od 0 do 256, tomu odpovídá "průsečík" pořadí bitů v každé "ose" R-G-B, tj. např. pro 100-120-255 bude zapsána logická jednička do pole 100,120,255)
- před zápisem jen zkontroluješ, zda už tam jednička je či není, pokud už jednička je, nic neřešíš a jdeš na další pixel (barvu). Pokud tam jednička není, zapíšeš jedničku a zvýšíš počitadlo o jednotku, protože jsi našel novou barvu.
Tvůj omyl je v tom, že pole stavíš na bajtech, přitom ti stačí nikoli číselná hodnota, ale prosté ano/ne na zjištění toho, zda se už objevila daná variace s opakováním pro tři čísla od 0 do 255.
edit: abych předešel hádkám: samozřejmě záleží na implementaci toho, jak je typ boolean, případně jeho pole v daném jazyku implementován(o) - zda je v paměti alokován opravdu jako bit, nebo jako byte (pak by samozřejmě toto snažení z hlediska přeloženého kódu bylo zbytečné, a proto výše zmiňuju "okliku" přes integer)