[PL]Własny format pliku graficznego w C++ #2 - #informatycznie
Hej!
Post ten jest kontynuacją tego postu: https://steemit.com/polish/@kappucino/pl-wlasny-format-pliku-graficznego-w-c-informatycznie
Prace nad programem konwertującym BMP do GMD i z GMD do BMP trwają :) Po skończeniu program pojawi się jako open-source na githubie/utopian.io, może ktoś skorzysta :)
Co już jest?
- Wczytywanie BMP
- Wczytywanie GMD
- Zapis BMP
- Zapis GMD
- Konwersja BMP do 8-stopniowej skali szarości
- Konwersja BMP do 8 kolorów narzucanych przez format GMD
- Proste menu
Co zostało do zrobienia?
- Kompresja LZW
- Zapis kolorów dedykowanych dla danego obrazka
- Usprawnienie kodu odpowiadającego za wczytywanie BMP
- Usprawnienie zapisu GMD
Konwersja 16,777,216 kolorów do 8
Mój format obsługuje tylko 8 kolorów w dwóch trybach:
- Kolory dedykowane dla danego obrazka,
- Kolory narzucone przez format GMD.
Z kolorami narzuconymi przez format GMD poradziłem sobie korzystając z prostego równania:
((GMDColors[i].R - kolor.R)*(GMDColors[i].R - kolor.R) + (GMDColors[i].G - kolor.G)*(GMDColors[i].G - kolor.G) + (GMDColors[i].B - kolor.B)*(GMDColors[i].B - kolor.B))
Gdzie GMDColors to tablica kolorów narzuconych, a kolor to kolor danego piksela. Równanie się sprawdza, działa dobrze, więc nie myślałem nad innymi sposobami, ale może ktoś jakieś zna?
Zastanawiam się też czy w przypadku wybierania kolorów dedykowanych dla danego obrazka dobrym sposobem będzie zliczanie wszystkich kolorów i wybranie ośmiu najczęściej występujących? Ewentualnie odrzucenie podobnych do siebie lub zgrupowanie ich w jeden?
Będę wdzięczny za wszelką pomoc :) Dzięki za przeczytanie! :)