Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [C] Conversione immagine in binario

    Salve ragazzi, ho appena scoperto qst bellissimo forum! Vi faccio i complimenti. Vi espongo il mio problema. Dovrei convertire delle immagini (in formato .bmp) in binario! Precisamente qst immagini sono in bianco e nero e dovrei far corrispondere al colore nero il bit 1 e al colore bianco il bit 0. Quindi devo creare una matrice di 0 e 1 da scrivere su un file .txt!!! Mi sto scervellando ma nn riesco a trovare nessuna soluzione!! qlkn mi può dare una mano? vi ringrazio in anticipo!

  2. #2
    In primo luogo ti devi studiare il formato delle bitmap; questo è un buon punto di partenza.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Il formato bitmap è relativamente semplice, il problema è che per fare quello che chiedi dovresti conoscerlo.

    Essenzialmente se consideriamo la versione 3 (lasciando perdere la 4 e la 5) dovrai innanzitutto andarti a leggere dal file bitmap i due header: BITMAPFILEHEADER e BITMAPINFOHEADER. In particolare dovrai conoscere l'offset dalla mappa dei pixel (per sapere da dove iniziare a riempire la tua matrice) e la profondità dell'immagine (poichè le bitmap con 1, 4 e 8 bit per pixel contengono una tavolozza dei colori subito dopo il secondo header, mentre le bitmap con 16, 24 o 32 bit per pixel utilizzano la rappresentazione del colore attraverso le componenti cromatiche RGB).

    Ti faccio un esempio per renderti più chiare le idee, supponi di avere una bitmap 8 bit per pixel con tavolozza.

    a) BITMAPFILEHEADER: Sono esattamente 14 bytes, gli ultimi 4 rappresentano l'offset del primo byte della mappa dei pixel.

    b) BITMAPINFOHEADER: Sono esattamente 40 bytes, la profondità (BitCount - 8 bit per pixel la trovi nel 14-esimo e 15-esimo byte).

    c) Palette (tavolozza): Sono le 256 componenti RGB:

    Se ad esempio le prime due componenti sono:
    255 255 255
    0 0 0

    Significa che nella successiva mappa dei pixel se trovi 1 il colore corrispondente è il bianco(255, 255, 255); se trovi 2 il colore corrispondente è il nero(0, 0, 0).


    Se non ci fosse stata la palette avresti trovato appunto al posto degli indici (1, 2, ... ) le intere componenti cromatiche.

    Studiati il formato.

    Ps: su MSDN trovi classi già implementate per poter lavorare con questo tipo di formato, a meno che tu non decida di fartene una per conto tuo.

    Ciao

  4. #4
    La cosa odiosa delle DIB è che sono memorizzate capovolte, e le righe sono allineate a 4 byte... Ogni volta per calcolare l'offset bisogna fare delle contorsioni mentali.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    innanzitutto vi ringrazio per le risposte. Io nn voglio crearmi una funzione ad hoc...me ne basta una già implementata. dove posso trovare qlk libreria da importare?? Io uso il dev c++ come compilatore e sto avendo un pò di problemi proprio nell'importare le librerie!! consigli?

  6. #6
    Per fare quello che dici non esiste qualcosa di già pronto (che io sappia), devi pensarci tu. Come ti dicevo però esistono dei metodi che ti consentono di lavorare con questo formato. Qui trovi tutte le informazioni necessarie: bitmap

  7. #7
    grazie mille!!! gli darò un'occhiata!!! Ci risentiamo in caso di dubbi

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 © 2025 vBulletin Solutions, Inc. All rights reserved.