Hej!
Może wpierw od założeń zaczne:
ZAŁOŻENIA:
- kompresja stratna, bez możliwosci zmiany poziomu kompresji, zysk około 75%, jakość - nie wiem (jestem w trakcie pisania takiego próbnego kodera/dekodera żeby przekonać się jak to wygląda w praktyce)
ZASTOSOWANIE:
- dla grafiki w 15 trybie (160x192x4kolory), w odcieniach kolorow kolejno stopniowanych (ale tez mam pewien pomysl jak poradzic sobie z roznymi kolorami, aby wynik był zadawalajacy, ale podkreślam nie wiem jak to wyjdzie w praktyce.
KODOWANIE OBRAZU:
- Obraz dzielimy na wirtualne, nazwijmy to obszary 16 pixelowe (4x4) czyli w ten sposob uzyskujemy pole skladające sie z 40x48 obszary.
- każdy pojedyńczy obszar zapiszemy tylko na 1 bajcie !
- pojedynczy obszar dzielimy wirtualnie pionowo i poziomo na pół. usyskujac 4 mikro obszary 2x2 pixle
AB AB
CD CD
AB AB
CD CD
- Badamy kolejno każdy mikro obszar pod względem wartości kolorów znajdujących się w tym obszarze i wykonujemy działanie
INT((A+B+C+D)/4) -> uzyskana wartość bedzie z przedziału 0-4 (całkowita). Zapisujemy wiec ja na 2 bitach
00 dla 0
01 dla 1
10 dla 2
11 dla 3
- tak zakodowana wartosc sredniego koloru dla wszystkich mikroobszarów umieszczamy obok siebie w 1 bajcie (1 obszar=4 mikro obszary) np: 01 11 00 10
ODKODOWYWANIE:
- W pamieci tworzymy tablice 255 klocków, które mają rozmiar 4x4 pixle (tyle co jeden obszar). Kazdy klocek wiec składa sie z 4 kolejnych bajtów reprezentujacych wyglad graficzny jednego obszaru (255 klocków, dlatego że tyle jest wszystkich kombinacji 4^4). W sumie tablica zajmie 1024 bajty - 1 kilo
- odczytujac jeden bajt obrazu, skaczemy na poczatek tablicy klockow, odczytana wartosc bajtowa (0-255) z obrazu * 4, skaczemy pod adres poczatek_tablicy+(odczytany_bajt*4), odczytujemy z niego 4 kolejne bajty i kopiujemy odpowiednio na pamiec obrazu (np: $a150,A $a150+40,B $a150+80,C $a150+120,D) czyli poszczególne bajty pod siebie...
- w ten sposob odczytujemy wszystkie 40X48 obszarów...
PODSUMOWANIE:
tablica klockow =1024 bajty
dane obrazu =1920 bajty
------------------------------
suma: 2944 bajty dla całego obrazu w 15 grafice + pamiec dla procedurki dekodujacej, ale nastepny obraz to dodatkowo tylko 1920 bajtow...
TWORZENIE TABLICY KLOCKOW
- Tworzymy 255 kombinacyjnych klocków o rozdzielczosci 4x4
- znaczace kolory umieszczamy w rogach kwadratu wg ustalonej kolejnosci np.
1x x2
xx xx
xx xx
3x x4
- pixle oznaczone X interpolujemy do czterech baz kolorów na rogach.
- obszar zapisujemy na 4 bajtach
1 bajt
2 bajt
3 bajt
4 bajt
===============================================
ps1. Panowie napiszcie co sądzicie o moim pomyśle ?
ps2. Jakby fajnie wyszło to może ktoś napisze jakiś sofcik suportujący ten wynalazek
ps3. Moze ktoś ma lepszy pomysl ??
ps4. Pomyslałem sobie że jak fajnie bedzię to wyglądać to może sie pokusić na konwesje LARRY'ego na Atarke... z grzyba... grafika cało ekranowa chociaż skompresowana :) ale to już bym potrzebował mocnego wsparcia od kogoś od was
===============================================
DELY - Moze stworzyć rubryke a'la RFC dla malucha :) może coś ciekawego się wykroi :)
pozdrawiam...
jakby co to do mnie zajac4@wp.pl
-------------------------------------------------------------------------------------