Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione realme 16 5G: lo smartphone con Selfie Mirror ha una batteria da 6550mAh
Recensione realme 16 5G: lo smartphone con Selfie Mirror ha una batteria da 6550mAh
realme 16 5G è un nuovo smartphone con sensore Sony IMX 852 da 50MP sul retro e uno specchio selfie fisico integrato nella camera bar, una prima nel segmento di mercato. Batteria da 6550mAh in un corpo da 8,1mm e 183g, certificazione IP69K e ricarica da 45W completano un pacchetto aggressivo per la fascia media, per uno dei prodotti più interessanti del produttore sul piano commerciale
Come rispettare tutte le nuove regole per i monopattini elettrici? La guida per non rischiare sanzioni
Come rispettare tutte le nuove regole per i monopattini elettrici? La guida per non rischiare sanzioni
Sono ormai definitive le nuove norme del Codice della Strada per i monopattini elettrici. Non solo targa e assicurazione, le regole sono tante e riguardano diversi aspetti, vi spieghiamo come evitare sanzioni che possono essere salate
DLSS 4.5: con Dynamic Frame Generation e MFG 6X NVIDIA alza la posta
DLSS 4.5: con Dynamic Frame Generation e MFG 6X NVIDIA alza la posta
DLSS 4.5 introduce Dynamic Multi Frame Generation e MFG 6X, permettendo fino a cinque frame generati per ogni frame renderizzato. I test su Cyberpunk 2077 e 007 First Light mostrano forti incrementi di FPS e riduzione della latenza su RTX 5090 Laptop. Migliorano fluidità, stabilità e qualità visiva.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 10-11-2011, 21:09   #1
tecno789
Senior Member
 
L'Avatar di tecno789
 
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
tecno789 è offline   Rispondi citando il messaggio o parte di esso
Old 10-11-2011, 21:32   #2
demos88
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 5900X @ 4,7Ghz + Thermalright Phantom Spirit 120 SE / MB Asus X470-F Gaming / RAM 2x16GB DDR4 Corsair 3600 CL16 / VGA Sapphire RX 7900 XT Nitro+ / SSD Crucial T500 1TB + Samsung 970 Pro 512GB + Sandisk 960GB Ultra II / PSU FSP Hydro G PRO 1000W / Headset Kingston HyperX Flight

Ultima modifica di demos88 : 10-11-2011 alle 21:35.
demos88 è offline   Rispondi citando il messaggio o parte di esso
Old 10-11-2011, 21:33   #3
ndakota
Senior Member
 
L'Avatar di ndakota
 
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
ndakota è offline   Rispondi citando il messaggio o parte di esso
Old 10-11-2011, 21:40   #4
tecno789
Senior Member
 
L'Avatar di tecno789
 
Iscritto dal: Jan 2010
Città: (MB)
Messaggi: 11971
Quote:
Originariamente inviato da demos88 Guarda i messaggi
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...
grazie mille ottima spiegazione, si infatti c'è molta teoria, io ne volevo fare uno per poter vedere se "funzionava", nel senso vedere se il file in output è più leggero di quello in ingresso.
Quote:
Originariamente inviato da ndakota Guarda i messaggi
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
no voglio scrivermelo da solo ovviamente, altrimenti prendo winRar
__________________
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
tecno789 è offline   Rispondi citando il messaggio o parte di esso
Old 10-11-2011, 23:07   #5
Mirkolo
Senior Member
 
L'Avatar di Mirkolo
 
Iscritto dal: Sep 2007
Messaggi: 329
La compressione RLE è forse la più semplice ed intuitiva, quindi parti pure con quella per farti le ossa L'implementazione più famosa penso sia la PackedBits di Apple, usata in molti campi. Ad esempio, il tanto famoso formato PSD di Adobe salva le righe delle immagini (solo con profondità a 8bit però) in PackedBits. L'algoritmo di decompressione funziona così: se il primo byte letto L è minore di 128, i successivi L+1 byte vengono copiati in output così come sono, mentre se è maggiore di 128 il byte successivo viene ripetuto in uscita 257-L volte. Questo permette di tranne vantaggio dalla sequenza di byte ripetuti, ma al tempo stesso non raddoppiare la dimensione del file compresso se i byte sono tutti diversi tra loro. Sulla base di queste regole puoi ricavarti il compressore. Da notare che non esiste un modo univoco di comprimere, ma facendo un paio di considerazioni puoi arrivare a capire quale è quello più efficiente.

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
Mirkolo è offline   Rispondi citando il messaggio o parte di esso
Old 11-11-2011, 16:59   #6
tecno789
Senior Member
 
L'Avatar di tecno789
 
Iscritto dal: Jan 2010
Città: (MB)
Messaggi: 11971
Quote:
Originariamente inviato da Mirkolo Guarda i messaggi
La compressione RLE è forse la più semplice ed intuitiva, quindi parti pure con quella per farti le ossa L'implementazione più famosa penso sia la PackedBits di Apple, usata in molti campi. Ad esempio, il tanto famoso formato PSD di Adobe salva le righe delle immagini (solo con profondità a 8bit però) in PackedBits. L'algoritmo di decompressione funziona così: se il primo byte letto L è minore di 128, i successivi L+1 byte vengono copiati in output così come sono, mentre se è maggiore di 128 il byte successivo viene ripetuto in uscita 257-L volte. Questo permette di tranne vantaggio dalla sequenza di byte ripetuti, ma al tempo stesso non raddoppiare la dimensione del file compresso se i byte sono tutti diversi tra loro. Sulla base di queste regole puoi ricavarti il compressore. Da notare che non esiste un modo univoco di comprimere, ma facendo un paio di considerazioni puoi arrivare a capire quale è quello più efficiente.

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
wow che spiegazione grazie!!!!

si ho letto anche io che wikipedia organizzava gare del genere, ma ovviamente non ho le skills adatte...
__________________
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
tecno789 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione realme 16 5G: lo smartphone con Selfie Mirror ha una batteria da 6550mAh Recensione realme 16 5G: lo smartphone con Selfi...
Come rispettare tutte le nuove regole per i monopattini elettrici? La guida per non rischiare sanzioni Come rispettare tutte le nuove regole per i mono...
DLSS 4.5: con Dynamic Frame Generation e MFG 6X NVIDIA alza la posta DLSS 4.5: con Dynamic Frame Generation e MFG 6X ...
Plaud NotePin S, il registratore IA si fa indossabile (ma è facile da perdere) Plaud NotePin S, il registratore IA si fa indoss...
Redmi Watch 6 in prova: lo smartwatch con ampio display da 2000 nit a meno di 100 euro Redmi Watch 6 in prova: lo smartwatch con ampio ...
FASTCloud Open Source: un cloud sovrano ...
AMD non lascia spazio a Intel: la top 15...
iPhone 17 torna protagonista su Amazon: ...
PowerToys si aggiorna alla versione 0.10...
La nuova Audi Q7 proietta le frecce sull...
Framework blocca tutto: Laptop 13 Pro no...
SSD, Biwin investe oltre metà del...
Samsung Trend Radar 2026: smartphone e s...
Enel entra nella telefonia mobile: il vi...
Arriva il menu contestuale aggiornato di...
GM punta sulle batterie al sodio per lo ...
Instagram amplia il controllo sull'algor...
Jason Wild: "Siamo bravissimi a ris...
Razer BlackShark V2 X a 34,99€: cuffie e...
d-Matrix avvia la produzione di Corsair:...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 18:35.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v