Konwerter obrazu na tekst z pomocą królowej nauk

Konwerter obrazu na tekst to program zamieniający piksele w pliku graficznym na tekst wyrażony znakami ascii w notatniku. Co prawda taka aplikacja nie ma zbyt wielu zastosowań, ale stanowi miłe, krótkie ćwiczenie w operowaniu na obrazie oraz plikach. Dla przykładu tak wygląda działanie omawianego programu.

Dla przykładu tak wygląda działanie omawianego programu:

Dobrze, jak więc się do tego zabrać?

Potrzebujemy:

  • funkcji do wyczytania koloru pojedynczego piksela.
  • wzoru na wyznaczenie jaskrawości.
  • algorytmu do zmiany grupy pikseli na znaki z uwzględnieniem rozdzielczości oraz z jednoczesnym zapisem do pliku tekstowego.

Funkcja do wyczytania koloru pojedynczego piksela – będzie ona zwracać tablice z kolorami poszczególnych pikseli. Jako, że nie ma tu za dużo myślenia pozwolę sobie na pokazanie Ci po prostu jak tego dokonać.

Wzór na wyznaczenie jaskrawości – no to już nie będzie takie proste. Musimy zagłębić się nieco w teorię, by wiedzieć jak dokładnie ma on wyglądać.

Zmienna kolor operuje w formacie RGB w którym każda z liter odpowiada poziomowi barw: czerwonego, zielonego i niebieskiego. W modelu tym wartość 0 oznacza brak danej składowej, natomiast 255 pełną jej zawartość. Nie interesują nas jednak konkretne barwy. Nam potrzebna będzie jaskrawość piksela. Jak więc ją otrzymać? Po skorzystaniu z pomocy niezawodnego programu do grafiki MS Paint oraz otworzeniu w nim okna do edytowania kolorów po prawej stronie naszym oczom ukaże się pasek który przedstawia to czego szukamy

Po chwili zabawy dostrzec można pewną prawidłowość. Mianowicie jedynie najmniejsza i największa wartość ma wpływ na jaskrawość koloru. Na tej podstawie jesteśmy w stanie stworzyć wzór który pozwoli nam osiągnąć swój cel.

Jaskrawość przedstawiliśmy w procentach. Jako, że wartości mają taki sam wpływ na wynik to operują jedynie na pięćdziesięciu procentach, a dopiero ich suma daje nam oczekiwany rezultat.

Algorytm do zmiany grupy pikseli na znaki z uwzględnieniem rozdzielczości oraz z jednoczesnym zapisem do pliku tekstowego
– czas na ostatni etap naszej aplikacji. Teraz wystarczy jedynie stworzyć tablicę znaków w kolejności odpowiadającej jaskrawości pikseli i przeskanować całą bitmapę wpisując je do pliku tekstowego. Rozdzielczość uwzględnimy grupując piksele, by następnie wyciągnąć z nich średnią. Zrobimy to za pomocą zagnieżdżonych pętli for – dokładnie czterech.

Tak wygląda gotowa aplikacja:

Tak jak mówiłem wcześniej – mimo że aplikacja ma niecałe sześćdziesiąt linijek to jest naprawdę przyjemnym i pouczającym ćwiczeniem w którym matematyka odegrała kluczową rolę, No i dodatkowo możemy się teraz chwalić tekstowym Chuck’iem Norris’em. Wersję zawierającą interface graficzny znajdziesz na moim Git Hub’ie, a tymczasem dziękuję Ci za lekturę zamieszczonych przeze mnie artykułów.

https://github.com/Meridor6919
michalbalicki@o2.pl