Witam.
Mógł bym mi ktoś pomóc i zmienić kod dla kompresji i dekompresji RLE tak by wyszedł Byterun ? Bardzo mi na tym zależy bo na dniach musze oddać projekt.
Tutaj zamieszczam kompresje i dekompresje RLE.
void kompresja_RLE(FILE *wejsciowy, FILE *wyjsciowy)
{
char x, y, z; // zmienne służace do porownywania wartosci
unsigned char zliczanie = 0; // zmienna zliczajaca powtarzajacy sie kolor
bool plik; // zmienna pomocnicza sprawdzajaca czy sie plik nie skonczyl
plik = fread(&x, sizeof(char), 1, wejsciowy);
y = x + 1;
while (plik == true)
{
if (y != x)
{
if (zliczanie == 0)
{
fwrite(&x, sizeof(char), 1, wyjsciowy); // wrzucenie do pliku wyjściowego różnych znaków leżących koło siebie
}
else
{
zliczanie--; // gdy skonczyla sie sekwecja powtarzających sie znaków
fwrite(&y, sizeof(char), 1, wyjsciowy);
fwrite(&zliczanie, sizeof(char), 1, wyjsciowy);
fwrite(&x, sizeof(char), 1, wyjsciowy);
zliczanie = 0;
}
}
else
{
if (zliczanie == 255) // liczbę powtarzających sie znaków zapisujemy na jednym bajcie
{
// wypisujemy sekwecje jezeli ma ona maksymalna dlugosc
fwrite(&y, sizeof(char), 1, wyjsciowy);
fwrite(&zliczanie, sizeof(char), 1, wyjsciowy);
zliczanie = 0;
plik = fread(&x, sizeof(char), 1, wejsciowy);
y = x + 1;
continue;
}
else
{
zliczanie++; // zliczanie powtarzajacych sie znakow
}
}
plik = fread(&z, sizeof(char), 1, wejsciowy); // odczytanie kolejnego znaku z pliku wejsciowego
if (plik == true)
{
y = x;
x = z;
}
}
if (y == x) // jezeli plik konczy sie sekwecja wypisujemy ja
{
zliczanie--;
fwrite(&y, sizeof(char), 1, wyjsciowy);
fwrite(&zliczanie, sizeof(char), 1, wyjsciowy);
}
}
void dekompresja_RLE(FILE *wejsciowy, FILE *wyjsciowy)
{
char x, y; // zmienne służace do porownywania wartosci
unsigned char zliczanie = 0; // zmienna zliczajaca powtarzajacy sie kolor
bool plik; // zmienna pomocnicza sprawdzajaca czy sie plik nie skonczyl
plik = fread(&x, sizeof(char), 1, wejsciowy);
y = x + 1;
while (plik == true)
{
if (y != x)
{
fwrite(&x, sizeof(char), 1, wyjsciowy); // wrzucenie do pliku wyjściowego różnych znaków leżących koło siebie
y = x;
plik = fread(&x, sizeof(char), 1, wejsciowy); // odczytujemy kolejny znak
}
else
{
// gdy znaki obok siebie sa rowne
plik = fread(&zliczanie, sizeof(char), 1, wejsciowy); // odczytanie dlugosci sekwecji i wrzucenie jej do pliku
for (int i = 0; i <= zliczanie; i++)
{
fwrite(&x, sizeof(char), 1, wyjsciowy);
}
plik = fread(&x, sizeof(char), 1, wejsciowy); // odczytywanie kolejnego znaku
y = x + 1;
}
}
}