[SDL] [BitMapa] Zadanie z C++

0

Witam. Bardzo prosiłbym o pomoc przy zrozumieniu polecenia do zadania. Mój prowadzący poszedł na ponad miesięczne chorobowe przed sesją przez co nie mogłem się go po prostu zapytać o co kaman. Zadanie chce spróbować zrobić - mimo że jest nieobowiązkowe.

Treść zadania:
Zaimplementuj dwie klasy: ImageBW i ImageC implementujące odpowiednio bitmapowe obrazy czarno-białe i kolorowe. Rozmiary obrazów są ustalone przy tworzeniu obiektów jako parametry konstruktora. Zaprogramuj w tych klasach metody +(arg), *(arg), które zwracają nowy obiekt klasy ImageBW bądź ImageC. Metoda +(arg) tworzy nowy obraz, którego każdy piksel jest alternatywą bitową odpowiednich piksli. Takie operacje mają sens, gdy operacje wykonujemy na obrazkach o tych samych rozmiarach i tym samym typie (tj. tylko kolorowe z kolorowymi albo czarno-białe z czarno-białymi). Można przyjąć, że zawsze wykonujemy metody na poprawnych danych. Dodaj też do tych klas metodę narysuj rysującą obrazy postaci ascii-art’u.

Więc czytam to zadanie, raz po raz i rozumiem z niego coraz mniej.

Myślę że mam zrobić 2 klasy reprezentujące 2 rozdaje bitMap. To znaczy że mam w obiekcie jednej klasy umieścić zdjęcie w kolorze a w drugiej zdjęcie w szarościach? Jeśli tak - to po co tworzyć osobne klasy - a nie skorzystać z wbudowanych funkcji np. jak w tym tutorialu? https://www.libsdl.org/releas[...].15/docs/html/guidevideo.html


Metoda +(arg) tworzy nowy obraz, którego każdy piksel jest alternatywą bitową odpowiednich piksli. Takie operacje mają sens, gdy operacje wykonujemy na obrazkach o tych samych rozmiarach i tym samym typie (tj. tylko kolorowe z kolorowymi albo czarno-białe z czarno-białymi).

Jak interpretować alternatywę bitową? BitMapy to macierze które przechowują wartości R,G,B jak zrobić sumę logiczną (bo tak interpretuje alternatywę) na owych wartościach? Nie rozumiem co ma robić przeładowanie operatora + jej wynikiem ma być macierz? Wynikiem alternatywy jest 0/1 prawda/fausz ma być to macierz binarna?


No i moja największa bolączka, co ma robić *(arg)?

Bardzo proszę o pomoc.

1

Klasa ImageBW ma przechowywać obrazy w formie czarno białej, a ImageC w formie kolorowej. Zatem jeden obraz z dysku (kolorowy) powinien być wczytywany przez obie z klas i dawać różne wyniki. Załadowanie obrazu kolorowego do ImageBW powinno konwertować kolory do czerni i bieli - tak ja to widzę. Konwersja piksela kolorowego na BW może np. przebiegać poprzez wyciągnięcie średniej z wartości kolorów RGB.

Operator + ma "nakładać na siebie" oba obrazy. Zwykły OR na każdym z pikseli (nie pojedynczym bicie, tylko np. na 8 bitach, jeśli tyle ma piksel) - wynikiem jest obraz zawierający dwa nałożone na siebie obrazy. Łatwo to sobie wyobrazić za pomocą dwóch obrazów, gdzie każdy z nich ma narysowany okrąg w innym miejscu - sumą tych obrazów jest obraz zawierający dwa okręgi.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0