|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jan 2010
Città: (MB)
Messaggi: 11971
|
[C] algoritmo per comprimere un file
Salve a tutti, vorrei poter fare un programma che dato in input un file mi possa dare in output un file compresso, cioè che pesa meno in termini di byte, come posso realizzare ciò in C??? Premetto che sto cercando di capire il RLE ma proprio non so come metterlo in pratica, penso che voi mi possiate dare una mano consistente!
grazie
__________________
CPU: Ryzen 3700x DISSY: CM HYPER EVO 212 RAM: 16gb DDR4 3000Mhz MOBO: MSI b350 tomahawk VGA: MSI Ventus 2X 4060TI 16GB ALI: Cooler Master V550 SSD: Samsung 970 Evo Plus Trattive+:(a) topolino2808(x2), galfum, giap959, sm_morgan, Biduzzo, huangwei, maxmax80, bubbi, dinamite2, PaxNoctis;(v) rubrie, CubeDs, Slater91, Juvanni, FireFox152, gluvocio, giulio81, emahwupgrade, Velvet, semmy83, giocher03 |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Padova
Messaggi: 2342
|
Beh l'argomento "compressione dei dati" è un campo di ricerca molto attivo dell'informatica. Ci sono tantissimi algoritmi diversi (molti proprietari).
L'RLE è uno dei più semplici, ma funziona bene solo in alcune circostanze. RLE non fa altro che raggruppare unità di dati consecutive uguali, in altre parole, se trasmetto la sequenza: AAAAAAAAAABBBCCCCCCCCCCCCCCCCAAAABBACCCC (40 carattewri ASCII8 => 60bytes) la versione compressa sarà 10A3B16C4A2B1A4C (14 bytes: scrivo in un byte quante volte si ripete consecutivamente uno stesso valore, il byte successivo contiene il dato) E' facile notare che se in media le sequenze contigue sono più corte di 2 elementi, la compressione è controproducente (e questo capita praticamente sempre nei file binari). L'RLE risulta più efficace nella compressione di immagini con numero di colori ridotto, per esempio è usata per i fax che trasmettono in bianco e nero documenti che molto spesso contengono lunghe sequenze di pixel bianchi (ma anche nei fax, questa compressione è combinata con altre) Potresti provare a vedere l'Huffman, è intuitivo (a patto di conoscere come funzionano gli alberi binari). Comunque c'è molta teoria dietro tutto questo, non è semplice Se ti serve una compressione "professionale" magari trovi qualche libreria già free in internet...
__________________
CPU Ryzen 2600 @ 3,95Ghz + Bequiet Dark Rock TF / MB Asus X470-F Gaming / RAM 2x8GB DDR4 G.Skill FlareX 3200 CL14 / VGA Sapphire RX 7900 XT Nitro+ @ 3200Mhz / SSD Samsung 970 Pro 512GB + Sandisk 240GB Plus + Sandisk 960GB Ultra II PSU Seasonic Platinum P-660 / Headset Kingston HyperX Flight Ultima modifica di demos88 : 10-11-2011 alle 22:35. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
In fondo a questa pagina puoi scaricare una versione in C.
http://michael.dipperstein.com/rle/index.html Edit: Ho risposto in questo modo ma in realtà non ho capito se vuoi un codice da usare effettivamente o vuoi capire come funziona e arrivare a scrivere il codice da solo
|
|
|
|
|
|
#4 | ||
|
Senior Member
Iscritto dal: Jan 2010
Città: (MB)
Messaggi: 11971
|
Quote:
Quote:
__________________
CPU: Ryzen 3700x DISSY: CM HYPER EVO 212 RAM: 16gb DDR4 3000Mhz MOBO: MSI b350 tomahawk VGA: MSI Ventus 2X 4060TI 16GB ALI: Cooler Master V550 SSD: Samsung 970 Evo Plus Trattive+:(a) topolino2808(x2), galfum, giap959, sm_morgan, Biduzzo, huangwei, maxmax80, bubbi, dinamite2, PaxNoctis;(v) rubrie, CubeDs, Slater91, Juvanni, FireFox152, gluvocio, giulio81, emahwupgrade, Velvet, semmy83, giocher03 |
||
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Sep 2007
Messaggi: 329
|
La compressione RLE è forse la più semplice ed intuitiva, quindi parti pure con quella per farti le ossa
Viene usato da Adobe nei PSD e in altri formati grafici proprio perchè certe grafiche (es. uno screenshoot del tuo desktop) hanno molti pixel vicini dello stesso colore. Ma se provi a comprimerci una foto otterrai risultati insoddisfacenti. In quei casi, se si vuol restare nel campo loseless, bisogna creare algoritmi ad hoc basati sulla natura del segnale (vedi flac per l'audio). Gli altri sistemi sono basati generalmente su due fatti: 1) la codifica di più byte assieme tramite dizionari, 2) la codifica entropica. Quest'ultima si basa sul fatto che, ad esempio, non tutti i simboli saranno presenti con la stessa frequenza sulla tua sorgente. Quindi, anzichè associare lo stesso numeri di bit a tutti i simboli, conviene associare codifiche più corte a quelli più probabili, e codifiche più lunghe a quelli meno. Cerca Huffman su google per avere qualche esempio o una miglior spiegazione. Se poi l'argomento ti appassiona leggiti qualcosa sui codificatori aritmetici, che sono anche piuttosto semplici da capire e più efficienti di Huffman. Anni fa avevo provato a partecipare allo Hutter Prize, una specie di gara dove ti pagavano in proporzione a quanto riuscivi a migliorare la compressione di 100mb di Wikipedia. Ho imparato molte cose, ma è stato un bagno di sangue avvicinarsi ai risultati degli altri partecipanti
__________________
Canon EOS 5D3 | 16-35 f/4 L IS | 24-105 f/4 L IS | 70-200 f/4 L IS | 14 f/2.8 | 24 f/1.4 L | 35 f/1.4 | 135 f/2.0 L | Canon 430EX |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Jan 2010
Città: (MB)
Messaggi: 11971
|
Quote:
si ho letto anche io che wikipedia organizzava gare del genere, ma ovviamente non ho le skills
__________________
CPU: Ryzen 3700x DISSY: CM HYPER EVO 212 RAM: 16gb DDR4 3000Mhz MOBO: MSI b350 tomahawk VGA: MSI Ventus 2X 4060TI 16GB ALI: Cooler Master V550 SSD: Samsung 970 Evo Plus Trattive+:(a) topolino2808(x2), galfum, giap959, sm_morgan, Biduzzo, huangwei, maxmax80, bubbi, dinamite2, PaxNoctis;(v) rubrie, CubeDs, Slater91, Juvanni, FireFox152, gluvocio, giulio81, emahwupgrade, Velvet, semmy83, giocher03 |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 09:13.



















