Mam mały problem z zastosowaniem kompresji RLE w bitmapie. Odczytałem składowe kolorów wszystkich pikseli w bitmapie, sprawdziłem ilość powtórzeń, ale nie wiem jak zapisać tą ilość powtórzeń w pliku. Będę wdzięczny za pomoc.
- Rejestracja:ponad 12 lat
- Ostatnio:ponad 6 lat
- Postów:62
0
Temat powinien mieć inny tutuł np. "Jak zapisać dane do pliku"
Przykład
#include <stdio.h>
int main ()
{
FILE * pFile;
pFile = fopen ("myfile.txt","w");
if (pFile!=NULL)
{
fputs ("fopen example",pFile);
fclose (pFile);
}
return 0;
}

- Rejestracja:około 20 lat
- Ostatnio:23 minuty
0
Tzn, chcesz:
- Zaimplementować kompresję RLE ze standardu BMP, PCX lub innego? Wtedy poczytaj w standardzie.
- Stworzyć własny mechanizm kompresji RLE? Wtedy wymyśl coś własnego.
2 cd.
Typowo robi się to tak (kompresja; zaczynamy z licznikiem powtórzeń == 0):
- wczytujemy znak z wejścia,
- jeśli licznik powtórzeń jest równy 0 i np 2 ostatnie znaki nie są takie same (lub do tej pory było mniej niż 2 znaki) to wypisz znak na wyjście od razu,
- jeśli 2 ostatnie znaki są takie same, ale aktualny znak jest inny niż wcześniejszy to zserializuj licznik, np tak: https://developers.google.com/protocol-buffers/docs/encoding#varints a nastepnie go wyzeruj i wypisz znak na wyjście,
- w innym wypadku, czyli jeśli 2 ostatnie znaki były takie same i aktualny znak też jest taki sam jak te wcześniejsze to zwiększ licznik o jeden i nie wypisuj nic na wyjście,
Proces dekodowania wtedy jest taki:
- wczytuj znak z wejścia,
- jeśli 2 ostatnie znaki są takie same i obecny znak także to wypisz aktualny znak, a następnie zdeserializuj licznik i wypisz dodatkowo tyle kopii ile wynosi wartość licznika,
- w innym wypadku po prostu wypisz znak na wyjście,
Zamiast 'znaki' możesz oczywiście wstawić 'piksele' lub np podzielić obrazek na płaszczyzny (np płaszczyzna czerwieni, zieleni i niebieskiego).
Pseudokod nietestowany. Może być zwalony.
edytowany 7x, ostatnio: Wibowit
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.
Marszal