Fichier hexa, creation de BMP [Résolu]

Signaler
Messages postés
3
Date d'inscription
jeudi 16 avril 2009
Statut
Membre
Dernière intervention
13 mai 2009
-
Messages postés
3
Date d'inscription
jeudi 16 avril 2009
Statut
Membre
Dernière intervention
13 mai 2009
-
Bonjour à tous, voilà un petit moment que je cherche en vain la réponse à ma question...

Mon objectif : à partir d'un fichier binaire contenant les données brutes d'un image, être capable de créer un autre fichier binaire dans lequel j'aurais crée l'entête bitmap, puis ajouté les données brutes par recopie... (faire un bmp quoi !)

J'ai commencé a recherché a droite a gauche, et j'ai établi un bout de code (qui ne marche pas, bien sur !) donc je viens plaider de l'aide !

int main(int argc, char *argv[])
{
    FILE* fichierSource = NULL;
    FILE* fichierDest = NULL;
    char octet;
   
    fichierSource = fopen("RawData", "rb");
    fichierDest== fopen("Img", "wb");
   
    if ((fichierSource != NULL )&&(fichierDest != NULL))
    {
        /*creation de l'entete
        je ne sais pas du tout comment m'y prendre pour connaitre la taille de l'image.... et les autres données qui vont dans l'entête
        */
       
        //reccopie des données brutes
        fread(&octet,sizeof(char),1,fichierSource);
       
        while(feof(fichierSource)==0)
        {
            fwrite(&octet, sizeof(char), 1, fichierDest);
            fread(&octet,sizeof(char),1,fichierSource);
        }
    }
    else
    {
        printf("Ouverture des fichiers impossible!\n ");
    }
   
    fclose(fichierSource);
    fclose(fichierDest);
    system("PAUSE");
    return 0;
}

Voila, alors mes questions sont :

=>Comment puis-je connaitre les données a mettre dans l'entête (je sais comment est formée l'entête, mais je ne sais pas comment "calculer" la valeur de chaque champs... je ne sais pas si je suis très clair, par exemple je sais qu'on doit mettre la taille de l'image, mais je ne sais pas comment connaitre cette taille !)

=>Une erreur... fichierDest semble etre a null, je ne comprend pas pourquoi...

=>Si le fichierDest s'ouvrait correctement, la partie de code de reccopie est-elle correcte ? ou vaut-il mieux utiliser fputc fputS, fgetc... ?

Je suis désolé si mes questions semblent bêtes, mais c'est mon projet de stage et il y a eu une petite erreur dans les domaines (je suis censé faire de l'info de gestion, pas de la création d'image ! lol) Donc j'essaye de comprendre tant bien que mal et d'avancé...

Merci d'avance pour votre aide

Mikax

3 réponses

Messages postés
3
Date d'inscription
jeudi 16 avril 2009
Statut
Membre
Dernière intervention
13 mai 2009

Bon beh voilà, sujet résolu, je pars du principe que je connais les dimensions de l'image.
voila le code si ça interesse quelqu'un !

#include <stdio.h>
#include <stdlib.h>

#define HEIGHT 768
#define WIDTH 1024

int main(int argc, char *argv[])
{
    FILE* fichierSource = NULL;
    FILE* fichierDest = NULL;
    char octet, signature, signature2;
    int taillefich, champ, offset, tailleEntete, largeur, hauteur, nbPlan, prof, compr, tailleImg, resH, resV, nbCoul, nbImp;
   
    fichierSource = fopen("RawDatalion1024x768", "rb");
    fichierDest = fopen("Img.bmp", "wb");
   
    if ((fichierSource != NULL )&&(fichierDest != NULL))
    {
        //creation de l'entete
        signature=0x42;
        signature2=0x4D;// car bmp windows
        taillefich=14+40+(HEIGHT*WIDTH*3);//car 3 octet par pixel
        champ=0;
        offset=14+40;
        tailleEntete=40;
        largeur=WIDTH;
        hauteur=HEIGHT;
        nbPlan=1;
        prof=24;
        compr=0;
        tailleImg=(HEIGHT*WIDTH*3);
        resH=0;
        resV=0;
        nbCoul=0;
        nbImp=0;
       
        //FILE HEADER
        fwrite(&signature, sizeof(char), 1, fichierDest);
        fwrite(&signature2, sizeof(char), 1, fichierDest);//la signature entiere fait donc 2 octet
        fwrite((char*)&taillefich, sizeof(char), 4, fichierDest);//taille sur 4 octets...
        fwrite((char*)&champ, sizeof(char), 4, fichierDest);
        fwrite((char*)&offset, sizeof(char), 4, fichierDest);
       
        //Pic Header
        fwrite((char*)&tailleEntete, sizeof(char), 4, fichierDest);
        fwrite((char*)&largeur, sizeof(char), 4, fichierDest);
        fwrite((char*)&hauteur, sizeof(char), 4, fichierDest);
        fwrite((char*)&nbPlan, sizeof(char), 2, fichierDest);
        fwrite((char*)&prof, sizeof(char), 2, fichierDest);
        fwrite((char*)&compr, sizeof(char), 4, fichierDest);
        fwrite((char*)&tailleImg, sizeof(char), 4, fichierDest);
        fwrite((char*)&resH, sizeof(char), 4, fichierDest);
        fwrite((char*)&resV, sizeof(char), 4, fichierDest);
        fwrite((char*)&nbCoul, sizeof(char), 4, fichierDest);
        fwrite((char*)&nbImp, sizeof(char), 4, fichierDest);
       
        //reccopie des données brutes
        fread(&octet,sizeof(char),1,fichierSource);
       
        while(feof(fichierSource)==0)
        {
            fwrite(&octet, sizeof(char), 1, fichierDest);
            fread(&octet,sizeof(char),1,fichierSource);
        }
    }
    else
    {
        printf("Ouverture des fichiers impossible!\n ");
    }
   
    fclose(fichierSource);
    fclose(fichierDest);
    system("PAUSE");
    return 0;
}
Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
6
Salut
Regarde la très bonne source de Buno :
http://www.cppfrance.com/codes/LOADER-BMP-TRAITEMENT_33150.aspx
Elle te permettra de mieux comprendre le format bmp
A+
____________________________________________________________________________
Mon site internet :  
http://ImAnalyse.free.fr
Messages postés
3
Date d'inscription
jeudi 16 avril 2009
Statut
Membre
Dernière intervention
13 mai 2009

bon... autan pour moi j'ai trouvé l'erreur d'ouverture de fichier... faute de frappe lol, ok je sors !
Du coup j'ai ma reponse pour la recopie, ça marche nikel... reste l'entête !

Merci ;)