Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1

    [C]Lettura profondità colore immagine .bmp

    Ragazzi, premetto che non sapevo assolutamente dove piazzare questa discussione, perché non tratta pienamente di programmazione ma allo stesso tempo non se ne discosta nemmeno più di tanto, quindi scusatemi in anticipo.
    Ecco il mio problema. Ho scritto una funzione che legge il valore dei pixel di una immagine. Per farlo ha bisgono di verificare che l'immagine sottopostagli è in formato .bmp e che la profondità del colore sia a 8 bit. In un comune file .bmp, l'informazione riguardante la profondità del colore si trova al 28° byte del file binario, il problema è che se cerco di leggere tale valore da un file .bmp creato da Photohop ottengo uno '0' al posto di un '8' come valore della profondità, al 28° byte. Qualcuno può aiutarmi a risolvere il mio problema? Suppongo che i file gestiti da Photoshop salvino le informazioni al loro interno in modo differente, ma al riguardo googlando non ho trovato niente che mi sia stato d'aiuto...
    In ogni caso, la funzione che uso per leggere i pixel è la seguente:
    codice:
    void get_pixels(char path[]){
    FILE *fp;
    int i, j=0, dim=0, count=0;
    int offset;
    unsigned char depth=NULL;
    char bmp[5];
        
        fp = fopen(path, "rb");
        
        for(i=strlen(path)-4;i<strlen(path);i++){
            bmp[j]=path[i];
            j++;
        }
        if(strstr(bmp, ".bmp")==NULL){
            printf("\nIndicare un file .bmp come immagine!\n");
            exit(1);
        }
        
        fseek(fp, 28, SEEK_SET);
        fread(&depth, sizeof(depth), 1, fp);
        printf("\n%d", depth);
        
        if(depth!=8){
            printf("\nSelezionare una immagine a 8 bit!\n");
            exit(2);
        }
        
        fseek(fp, 10, SEEK_SET);
        fread(&offset, sizeof(offset), 1, fp);
        printf("\n%d", offset);
        
        dim=(4-(ima_lar % 4))+ima_lar;
        j=0;
        fseek(fp, offset, SEEK_SET);
        for(i=0;i<ima_alt*dim;i++){
            if(count!=ima_lar){
                fread(&pixels[j], sizeof(char), 1, fp);
                printf("\n%d: %d", j+1, pixels[j]);
                j++;
                count++;
            }else{
                fseek(fp, 1, SEEK_CUR);
                count=0;
            }
        }
        fclose(fp);
    }
    Vi ringrazio anticipatamente per la collaborazione...

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Facci scaricare l'immagine ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3

  4. #4
    Non si può leggere un'immagine in quel modo!
    Devi crearti le apposite strutture e leggere le proprietà,trovi un milione di siti che spiegano molto bene come leggere i file bmp.

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Io, con il tuo codice, leggo 8 come profondità per quell'immagine ...

    @vbextreme ... è vero che sarebbe molto meglio usare le apposite strutture ma non è vietato in assoluto fare diversamente ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Io, con il tuo codice, leggo 8 come profondità per quell'immagine ...
    Com'è possibile? E' giorni che provo e mi da sempre lo stesso errore...

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Sei *sicuro* che il file sia regolarmente aperto? Tu non controlli il valore di fp dopo la fopen ... sicuro che non sia NULL?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Confermo, se ce ne fosse bisogno, quanto detto da oregon: anche io con il codice di OP leggo 8 come profondità.
    A questo punto è probabile che il file non sia aperto: controlla il path che passi alla tua funzione.


  9. #9
    Ho corretto il codice e aggiunto un controllo per un eventuale errore nell'apertura del file...e in effetti l'errore c'era, ma vi spiego perché non ci avevo pensato. Praticamente il path da passare alla funzione è una stringa che il programma si procura da se attraverso un'altra funzione che salva in un array di stringhe tutti i nomi dei file contenuti in una directory che gli indico io. Stampando a video questo array di stringhe mi accorgo che contiene tutti i file esattamente come sono nella cartella. Non avevo pensato subito a questo errore perché in effetti 2.bmp è il secondo di 5 file che si trovano nella cartella. Col primo file non ci sono problemi, lo apre e lo legge subito, ma dal secondo al quinto(quelli che ho creato con photoshop), si presenta questo problema.
    Ora ho corretto il codice, ma controllando il path passato alla funzione vedo che è esatto, e d'altronde a voi funziona. Quindi non riesco proprio a capire quale sia il problema.

  10. #10
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Quindi il path è giusto?
    A questo punto forse conviene se posti tutto il codice... Può essere che ci sia qualche errore nel passaggio dal primo al secondo file, ma senza vedere il codice è difficile da dire.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.