+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 8 su 8

Librerie C: Lavorare con le immagini

  1. #1
    DrGonzo non è in linea Novello
    Salve ragazzi...sono alle prese con un progetto e mi serve capire come fare in C a lavorare con le matrici delle immagini. Cioè avendo una immagine BMP come faccio ad avere la sua matrice dei colori?

    Quali librerie devo includere...quali funzioni ci sono...c'è qualche documentazione su questa cosa da qualche parte?

    Grazie di una eventuale risposta...

  2. #2
    L'avatar di bottomap
    bottomap non è in linea Amanuense
    Ciao,

    Il linguaggio in sé non prevede funzioni specifiche per la trattazione delle immagini.

    Una bmp, comunque, è un formato raw (almeno nella sua versione più comune). Oltre ad un'intestazione che indica le dimensioni, il numero di bit per pixel e altre cose utili ad un decodificatore, i suoi bytes rappresentano i pixel dell'immagine. E la matrice che cerchi non è altro che il contenuto del file (intestazione esclusa ovviamente).

    I formati più diffusi sono RGB a 24 o 32bit. Nel primo i pixel sono codificati con 3 bytes (RGB) che contengono i valori Red Green e Blue (0..255). Nel secondo caso ogni pixel è codificato con quattro bytes ed uno di essi non viene usato (servirebbe teoricamente per la trasparenza).
    Nel formato standard la BMP è memorizzata uin righe all'inverso (l'ultima riga è la prima nel file).

    Ora come ora non ho molto tempo a disposizione... più tardi ti posto qualche riferimento più immediato. Puoi comunque iniziare cercando di studiare il formato del file BMP (se ne trovano trattazioni un po'ovunque in rete).

    Ciaociao
    ℹ️ Leggi di più su bottomap ...

  3. #3
    Quote Originariamente inviato da DrGonzo Visualizza il messaggio
    Salve ragazzi...sono alle prese con un progetto e mi serve capire come fare in C a lavorare con le matrici delle immagini. Cioè avendo una immagine BMP come faccio ad avere la sua matrice dei colori?

    Quali librerie devo includere...quali funzioni ci sono...c'è qualche documentazione su questa cosa da qualche parte?
    Non hai specificato il sistema operativo e l'ambiente di tuo interesse: dovrò quindi limitarmi ad una risposta generica.

    Per informazioni sul formato bitmap, niente di meglio che lo storico sito WOTSIT.

    Qui trovi invece un completo esempio in C per Windows.

    Sui repositories classici (Garbo, SIMTEL) e cercando ulteriormente con Google troverai decine di altri sorgenti C più o meno portabili, sebbene il formato BMP sia piuttosto windows-centrico per natura. Naturalmente vi sono ambienti verticali, come ad esempio Borland C++ Builder, per i quali esiste supporto nativo ai bitmap files, e innumerevoli librerie con funzionalità estese.

    Posso comunque confermarti che manipolare a livello basilare i files bitmap e le palette (ovvero la "matrice dei colori") è piuttosto banale, e perfino divertente - anche su MCU con capacità limitate.
    ℹ️ Leggi di più su M.A.W. 1968 ...

  4. #4
    DrGonzo non è in linea Novello
    Grazie M.A.W. Non so come si fa a darti un punto per la tua risposta perfettamente esplicativa...mi mancano dei semplici passaggi. Comunque GRAZIE TANTISSIME...

    P.S:. scusami...il sistema era Windows

  5. #5
    gheldrya non è in linea Scolaretto
    ciao, l'argomento interesserebbe anche a me e volevo approfittarne per chiedere una cosa.


    ho una btm a 32bit con risoluzione 800x600

    apro la btm in modalità binaria,supponiamo che abbia già controllato i campi chiave del header, e mi posiziono direttamente con la fseek al primo byte dati, se voglio salvarmi il primo pixel(dell'ultima riga) dovrò salvarmi i primi 4 byte che leggo giusto?se voglio poi sapere quanti pixel ci sono devo fare il numero di byte dati diviso 4,perchè ogni pixel è codificato con 4byte, giusto?

  6. #6
    Quote Originariamente inviato da gheldrya Visualizza il messaggio
    se voglio salvarmi il primo pixel(dell'ultima riga) dovrò salvarmi i primi 4 byte che leggo giusto?se voglio poi sapere quanti pixel ci sono devo fare il numero di byte dati diviso 4,perchè ogni pixel è codificato con 4byte, giusto?
    Sì, le tue deduzioni sono corrette. Il tuo formato 4 bpp (byte per pixel) implica senz'altro le conseguenze che hai elencato. Il conteggio dei pixel viene di norma convalidato anche utilizzando i campi specifici dello header che segnalano "l'altezza" e la "larghezza" della bitmap.

    Sull'ordinamento dei dati nella matrice, ricordo che le librerie disponibili in ambiente windows offrono una vista logica uniforme del buffer, che prescinde dal reale ordinamento nel file.
    Nella manipolazione raw, senza supporti specifici, si deve invece ovviamente tenere conto del formato fisico (e sperare di non avere a che fare con "varianti" di formato più o meno documentate, caso non escludibile a priori).
    ℹ️ Leggi di più su M.A.W. 1968 ...

  7. #7
    gheldrya non è in linea Scolaretto
    ok grazie, mi serviva la conferma perchè devo manipolare delle btm "manualmente" senza usare funzioni particolari di libreria.

    inoltre se voglio comprimerla, l'algoritmo più semplice da applicare sarebbe l'RLE(lossless)?altrimenti mi stavo documentanto sul metodo lossy delle trasformate discrete ma dovrei mettermi a studiare anche le trasformate che non conosco a livello matematico....

  8. #8
    Quote Originariamente inviato da gheldrya Visualizza il messaggio
    inoltre se voglio comprimerla, l'algoritmo più semplice da applicare sarebbe l'RLE(lossless)?altrimenti mi stavo documentanto sul metodo lossy delle trasformate discrete ma dovrei mettermi a studiare anche le trasformate che non conosco a livello matematico....
    Dipende strettamente dal risultato che ti occorre, e in generale dall'uso che vuoi fare dell'immagine compressa.

    Non hai specificato in modo esplicito se il tuo lavoro è soggetto a particolari vincoli o divieti (es. homework universitario) inerenti l'utilizzo di librerie di terze parti, in assoluto.
    Vorrei comunque ricordarti che esistono librerie di vario genere, per i più diffusi SO, sovente gratuite e con sorgenti, dedicate alla compressione in generale, e alla compressione delle immagini in particolare, sia lossy (es. JPEG) che lossless (es. LZW, ZIP...).
    Presta sempre attenzione ai vincoli di utilizzo di volta in volta esplicitati nella documentazione: l'utilizzo di alcune di queste tecniche è soggetto a limitazioni.

    Come avrai avuto modo di renderti conto effettuando qualche ricerca mirata (e magari visitando lo storico wotsit), le specifiche dei formati grafici più diffusi sono molto ben documentate sul web. In particolare per i linguaggi C e C++ esistono in tale area numerose reference implementations, librerie, snippets ed esempi applicativi, oltre ad intere applicazioni PD, freeware con sorgenti e opensource (es. GIMP) per il trattamento più o meno elementare di immagini.
    ℹ️ Leggi di più su M.A.W. 1968 ...

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Lavorare con i pst
    Da symonx80 nel forum Visual Basic 6
    Risposte: 1
    Ultimo Post: 23-11-2010, 18:27
  2. librerie per immagini vettoriali
    Da squalokiller nel forum C/C++
    Risposte: 0
    Ultimo Post: 21-08-2010, 08:28
  3. Lavorare con C# e sql
    Da molinac nel forum C#
    Risposte: 5
    Ultimo Post: 14-05-2010, 17:21
  4. Lavorare con le immagini
    Da cippalippa nel forum Altri linguaggi e strumenti
    Risposte: 3
    Ultimo Post: 09-03-2008, 15:24
  5. Lavorare In Rete
    Da jonikaweb nel forum Microsoft Word
    Risposte: 2
    Ultimo Post: 06-10-2005, 15:01