Fichier hexa, creation de BMP

Résolu
mikax31 Messages postés 3 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 13 mai 2009 - 13 mai 2009 à 13:01
mikax31 Messages postés 3 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 13 mai 2009 - 13 mai 2009 à 15:35
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

mikax31 Messages postés 3 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 13 mai 2009
13 mai 2009 à 15:35
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;
}
3
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
13 mai 2009 à 14:08
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
0
mikax31 Messages postés 3 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 13 mai 2009
13 mai 2009 à 14:16
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 ;)
0
Rejoignez-nous