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

    [c++] analizzare file bitmap

    ciao

    che voi sappiate, c'è un modo per analizzare una jpeg o un qualsiasi file bitmap in modo da sapere i codice esadecimale (o la combinazione di colori RGB) o un qualsiasi identificativo per capire il colore del pixel (x,y)?
    "durante i primi 5 miuti di pioggia nel bosco c'è ancora asciutto, poi quando smetterà di piovere nel bosco cadranno gocce per 5 minuti.....la natura ha un'ottima memoria..."

    http://www.kumbe.it

  2. #2
    Utente di HTML.it L'avatar di edriv
    Registrato dal
    Oct 2004
    Messaggi
    367
    Per i BMP è facile...
    Ecco un esempio che visualizza l'header di un file .bmp :
    codice:
    #include <iostream>
    #include <fstream>
    #include <string>
    #include <windows.h>
    
    using namespace std;
    
    void showchars(long int dati);
    
    void main()
    {
    	// Chiede il nome del file
    	string fname;
    	cout << "Nome del file .bmp da aprire? ";
    	cin >> fname;
    
    	// Apre il file e controlla se è valido
    	ifstream fin;
    	fin.open(fname.c_str(),ios::in | ios::binary);
    	if(!fin)
    	{
    		cout << "Mi dispiace, ma il file non sembra essere valido!"<<endl;
    		return;
    	}
    	
    	BITMAPFILEHEADER bmfh;
    	BITMAPINFOHEADER bmih;
    
    	fin.read((char *) &bmfh, sizeof(BITMAPFILEHEADER));
    	fin.read((char *) &bmih, sizeof(BITMAPINFOHEADER));
    
    	// Dice cosa fa
    	cout << "Informazioni sul file BMP:" << endl;
    	// Lunghezza header file
    	cout << "Lunghezza header file:\t" << sizeof(BITMAPFILEHEADER) << endl;
    	// Tipo file
    	cout << "Tipo:\t"; showchars(bmfh.bfType); cout << endl;
    	// Dimensioni file
    	cout << "Dimensioni:\t" << bmfh.bfSize << endl;
    	// Informazioni riservate
    	cout << "Informazioni riservate 1:\t" << bmfh.bfReserved1 << endl;
    	cout << "Informazioni riservate 2:\t" << bmfh.bfReserved2 << endl;
    	// Bytes di offset
    	cout << "Bytes di offset:\t" << bmfh.bfOffBits << endl;
    	cout << endl;
    	// Lunchezza header informazioni
    	cout << "Lunghezza header informazioni:\t" << sizeof(BITMAPINFOHEADER) << " = " << bmih.biSize << endl;
    	// Larghezza e altezza immagine
    	cout << "Larghezza file in pixel:\t" << bmih.biWidth << endl;
    	cout << "Altezza file in pixel:\t" << bmih.biHeight << endl;
    	// Piani
    	cout << "Piani:\t" << bmih.biPlanes << endl;
    	// Bit per pixel
    	cout << "Bit per pixel:\t" << bmih.biBitCount << endl;
    	// Compressione
    	switch(bmih.biCompression) {
    	case BI_RGB: cout << "Non ha compressione." << endl; break;
    	case BI_RLE8: cout << "Compressione per file a 8 bit per pixel" << endl; break;
    	case BI_RLE4: cout << "Compressione per file a 4 bit per pixel" << endl; break;
    	};
    	// Grandezza compressa facoltativa
    	if(bmih.biSizeImage != 0) cout << "Grandezza immagine compressa:\t" << bmih.biSizeImage << endl;
    	// Risoluzione
    	cout << "Risoluzione orrizzontale (pixel per metro):\t" << bmih.biXPelsPerMeter << endl;
    	cout << "Risoluzione verticale (pixel per metro):\t" << bmih.biYPelsPerMeter << endl;
    	cout << "Colori palette:\t" << bmih.biClrUsed << endl;
    	cout << "Colori palette importanti:\t" << bmih.biClrImportant << endl;
    
    }
    
    void showchars(long int dati)
    {
    	int i;
    	for(i=0; i<4; i++)
    	{
    		cout << char(dati);
    		dati >>= 8;
    	}
    }
    Per ulteriori info sul formato, se macini l'inglese:
    http://www.wotsit.org/

  3. #3
    ciao

    ti ringrazio della tua risposta

    ora ti faccio un'altra domanda!

    se io volessi creare una bitmap avendo a disposizione il colore di tutti i pixel...cosa dovrei fare?

    ad esempio vorrei fare una bitmap da 256x256 e poi disegnare alcuni pixel di nero, infine salvare il file su hard disk

    come posso fare?

    thnks
    "durante i primi 5 miuti di pioggia nel bosco c'è ancora asciutto, poi quando smetterà di piovere nel bosco cadranno gocce per 5 minuti.....la natura ha un'ottima memoria..."

    http://www.kumbe.it

  4. #4
    Utente di HTML.it L'avatar di edriv
    Registrato dal
    Oct 2004
    Messaggi
    367
    Memorizzi i colori in una matrice e poi scrivi il file nel formato bmp (le specifiche le trovi sul link che ti ho dato)

    Programmi che fanno di più di quello che ho postato non li ho fatti...

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.