Skip to content

O aplicatie pentru cursul de Structuri de date, comprimarea unei imagini folosind un arbore de compresie

Notifications You must be signed in to change notification settings

D9nni/PPM-Image-Compressor

Repository files navigation

SDA-Image-compressor

Programul poate comprima imagini atunci cand este apelat cu optiunea -c2 ./quadtree -c2 <input.ppm> <output.compressed>

Programul poate reface o imagine pornind de la compresia ei folosind -d ./quadtree -d <input.compressed> <output.ppm>

Mai exista si optiunea -c1, care ofera detalii despre dimensiunea arborelui de compresie.

Build

make build

Descriere implementare:

Fisierul quadtree.c:

  1. este fisierul principal al rezolvarii.
  2. programul stocheaza parametrii dati la rulare in variabile specifice si le verifica validitatea
  3. daca cerinta este -c1 sau -c2 rezolvarea e foarte similara, asa ca va face un caz comun. Intai citeste headerul fisierului .ppm, apoi pixel cu pixel intreaga imagine este memorata intr-o matrice de pixeli.
  4. definitia structurilor TPixel si TCompressionTree se afla in fisierul functions.h
  5. este apelata functia de compresie, care aplica intocmai formulele matematice din enunt
  6. pe baza arborelui construit se afiseaza output-ul specific fiecarei cerinte: pentru -c1 se afiseaza cateva statistici, pentru -c2 se construieste fisierul comprimat parcurgand pe nivel cu ajutorul unei cozi arborele
  7. pentru cerinta -d programul primeste ca parametru un fisier comprimat si il interpreteaza, construind imaginea (operatiune simetrica cu cea de la -c2, tot cu o coada)
  8. la sfarsit memoria folosita este dezalocata (pentru bonus)

Fisierul functions.c contine urmatoarele functii:

  1. createTree functie care aloca memorie pentru un nod al unui arbore
  2. freeTree functie care dezaloca un arbore pornind din radacina
  3. treeHeight calculeaza inaltimea arborelui
  4. compressImage construieste arborele de compresie impartind matricea imaginii in 4 sferturi la fiecare pas in care media depaseste factorul dat. Parametrii counter si maximumSize sunt folositi pentru cerinta 1
  5. printCompressionTree parcurge pe nivel si scrie arborele de compresie in fisier, dupa specificatiile enuntului
  6. readTree e o functie auxiliara folosita de functia de citire recursiva readTreeQueue, care face o parcurgere pe nivel in citire
  7. readTreeQueue e functia simetrica a functiei printCompresssionTree
  8. decompressTree functie care construieste matricea pixelilor imaginii pornind de la arborele de compresie
  9. printImage scrie matricea imaginii pixel cu pixel in fisierul .ppm de la cerinta 3

Fisierul queue.c contine implementari clasice pentru functiile necesare unei cozi.

About

O aplicatie pentru cursul de Structuri de date, comprimarea unei imagini folosind un arbore de compresie

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published