Domanda

Voglio decodificare i file JPEG e ottenere output decodificato non compresso in formato BMP / RGB. Sto usando GNU / Linux e C / C ++.

Ho dato un'occhiata a libjpeg, ma sembrava che non ci fosse buona documentazione disponibile. Quindi le mie domande sono:

  1. Dov'è la documentazione su libjpeg?
  2. Puoi suggerire altre librerie di decompressione jpeg basate su C?
È stato utile?

Soluzione

La documentazione per libjpeg viene fornita con il codice sorgente. Dal momento che non l'hai ancora trovato:

Scarica l'archivio del codice sorgente e apri il file libjpeg.doc . È un semplice file ASCII, non un documento di Word, quindi è meglio aprirlo in Blocco note o in un altro editor ASCII.

Esistono anche altri file .doc. La maggior parte di loro non è poi così interessante.

Sfortunatamente non posso raccomandare altre librerie oltre a libjpeg. Ho provato un paio di alternative, ma Libjpeg ha sempre vinto. È abbastanza facile lavorare con una volta che hai finito le basi. Inoltre è la libreria jpeg più completa e più stabile là fuori.

Altri suggerimenti

MagickWand è l'API C per ImageMagick:

http://imagemagick.org/script/magick-wand.php

Non l'ho usato, ma la documentazione sembra piuttosto estesa.

Dovresti dare un'occhiata a Qt's QImage. Ha un'interfaccia piuttosto semplice che rende questo compito davvero semplice. L'installazione è piuttosto semplice per ogni piattaforma.

Se Qt è eccessivo, puoi provare Magick ++ http://www.imagemagick.org/Magick++/ . Supporta operazioni simili ed è adatto anche per quel tipo di attività. L'ultima volta che l'ho usato, ho lottato un po 'con le dipendenze per questo su Windows, ma non ricordo molti problemi su Linux.

Per la classe Image di Magick ++, la funzione che probabilmente desideri è getConstPixels.

Ho un codice che puoi copiare (o semplicemente usare come riferimento) per caricare un'immagine jpeg usando la libreria libjpeg.

Puoi sfogliare il codice qui: http://code.google .com / p / kgui / source / browse / trunk / kguiimage.cpp
Cerca la funzione LoadJPGImage .

Il codice è configurato per gestire l'associazione c ++ della mia classe DataHandle per il caricamento dell'immagine, in questo modo l'immagine può essere un file o dati già in memoria o altro.

Una soluzione leggermente pronta all'uso è quella di acquisire una copia degli netpbm , che trasformano le immagini praticamente da qualsiasi formato a qualsiasi altro formato tramite uno dei numerosi formati intermedi molto semplici. Funzionano bene dalla shell e vengono spesso utilizzati nelle pipe per leggere un'immagine arbitraria, eseguire un'operazione su di essa e scriverla in un altro formato.

I formati pbm possono essere semplici come una semplice intestazione ASCII seguita dai dati RGB in ASCII o binario. Sono pensati per essere abbastanza semplici da usare senza che sia necessaria una libreria da implementare.

JPEG è supportato in netpbm dai filtri di lettura e scrittura implementati su libjpeg.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top