IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Visual C++ Discussion :

Afficher image bitmap déjà chargé en mémoire (tableau data)


Sujet :

Visual C++

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 13
    Points : 7
    Points
    7
    Par défaut Afficher image bitmap déjà chargé en mémoire (tableau data)
    Salut,
    Comment afficher une image bitmap qu'on a dégà chargé en mémoire dans le tableau data.
    La nature de la destination n'est pas très importante vous pouvez seulement écrire : Je veux juste l'algorithme de l'affichage, sachant que j'ai dégà essayé de faire une simple boucle imbriqué mais l'image s'affiche à l'envers.

    Merci pour votre aide

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par qoqo1 Voir le message
    Salut,
    Comment afficher une image bitmap qu'on a dégà chargé en mémoire dans le tableau data.
    La nature de la destination n'est pas très importante vous pouvez seulement écrire : Je veux juste l'algorithme de l'affichage, sachant que j'ai dégà essayé de faire une simple boucle imbriqué mais l'image s'affiche à l'envers.

    Merci pour votre aide
    Bonjour,
    Peux-tu nous montrer ce que tu as déjà fait ? Car ta question est quelque peu vague. La boucle imbriquée n'a pas fonctionnée soit parce que tu as parcouru les indices à l'envers, soit parce que ton buffer est à l'envers, soit parce que ta destination a des axes inversées. Sans ces infos, difficile d'en dire plus.

  3. #3
    Futur Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    Bonjour,
    Peux-tu nous montrer ce que tu as déjà fait ? Car ta question est quelque peu vague. La boucle imbriquée n'a pas fonctionnée soit parce que tu as parcouru les indices à l'envers, soit parce que ton buffer est à l'envers, soit parce que ta destination a des axes inversées. Sans ces infos, difficile d'en dire plus.
    Le code de l'affichage est dans la fonction LoadBitmapFile()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
     
     
    #include <windows.h>
    #include <stdio.h>
    #include <stdlib.h>
     
    typedef struct tagBITMAPFILEHEADER BITMAPFILEHEADER;
    struct btagBITMAPFILEHEADER
    {
    	WORD bfType;  //specifies the file type
    	DWORD bfSize;  //specifies the size in bytes of the bitmap file
    	WORD bfReserved1;  //reserved; must be 0
    	WORD bfReserved2;  //reserved; must be 0
    	DWORD bOffBits;  //species the offset in bytes from the bitmapfileheader to the bitmap bits
    };
     
    typedef struct tagBITMAPINFOHEADER BITMAPINFOHEADER;
    struct btagBITMAPINFOHEADER
    {
    	DWORD biSize;  //specifies the number of bytes required by the struct
    	LONG biWidth;  //specifies width in pixels
    	LONG biHeight;  //species height in pixels
    	WORD biPlanes; //specifies the number of color planes, must be 1
    	WORD biBitCount; //specifies the number of bit per pixel
    	DWORD biCompression;//spcifies the type of compression
    	DWORD biSizeImage;  //size of image in bytes
    	LONG biXPelsPerMeter;  //number of pixels per meter in x axis
    	LONG biYPelsPerMeter;  //number of pixels per meter in y axis
    	DWORD biClrUsed;  //number of colors used by th ebitmap
    	DWORD biClrImportant;  //number of colors that are important
    };
     
    unsigned char *LoadBitmapFile(char *filename, BITMAPINFOHEADER *bitmapInfoHeader)
    {
    	FILE *filePtr; //our file pointer
    	BITMAPFILEHEADER bitmapFileHeader; //our bitmap file header
    	unsigned char *bitmapImage;  //store image data
    	int imageIdx=0;  //image index counter
    	unsigned char tempRGB;  //our swap variable
    	int i,j,k;
    	SDL_Surface *surface = NULL;
    	SDL_Rect p;
     
    	//open filename in read binary mode
    	filePtr = fopen(filename,"rb");
    	if (filePtr == NULL)
    	return NULL;
     
    	//read the bitmap file header
    	fread(&bitmapFileHeader, sizeof(BITMAPFILEHEADER),1,filePtr);
     
    	//verify that this is a bmp file by check bitmap id
    	if (bitmapFileHeader.bfType !=0x4D42)
    	{
    		fclose(filePtr);
    		return NULL;
    	}
     
    	//read the bitmap info header
    	fread(bitmapInfoHeader, sizeof(BITMAPINFOHEADER),1,filePtr);
     
    	//move file point to the begging of bitmap data
    	fseek(filePtr, bitmapFileHeader.bfOffBits, SEEK_SET);
     
    	//allocate enough memory for the bitmap image data
    	bitmapImage = (unsigned char*)malloc(bitmapInfoHeader->biSizeImage);
     
    	//verify memory allocation
    	if (!bitmapImage)
    	{
    		free(bitmapImage);
    		fclose(filePtr);
    		return NULL;
    	}
     
    	//read in the bitmap image data
    	fread(bitmapImage,bitmapInfoHeader->biSizeImage,1,filePtr);
     
    	//make sure bitmap image data was read
    	if (bitmapImage == NULL)
    	{
    		fclose(filePtr);
    		return NULL;
    	}
     
    	//swap the r and b values to get RGB (bitmap is BGR)
    	for (imageIdx = 0;imageIdx < bitmapInfoHeader->biSizeImage;imageIdx+=3)
    	{
    		tempRGB = bitmapImage[imageIdx];
    		bitmapImage[imageIdx] = bitmapImage[imageIdx + 2];
    		bitmapImage[imageIdx + 2] = tempRGB;
    	}
     
                 // Affichage de l'image bitmap
    	k=0;
    	for(i=0; i<bitmapInfoHeader->biHeight; i++)
    	{
    		for(j=0; j<bitmapInfoHeader->biWidth; j++)
    		{
    			p.x = i;
    			p.y = j;
                              ColorRGB color;
                              color.r = bitmapImage[k];
                              color.r = bitmapImage[k+1];
                              color.r = bitmapImage[k+2];
    			PutPixel(x,y,color);
    			k+=3;
    		}
    	}
     
    	//close file and return bitmap iamge data
    	fclose(filePtr);
    	return bitmapImage;
    }
     
    int main()
    {
        BITMAPINFOHEADER bitmapInfoHeader;
        unsigned char *bitmapData;
     
        bitmapData = LoadBitmapFile("image.bmp",&bitmapInfoHeader);
     
    }

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    Ca ne serait pas plutôt ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    p.x = j;
    p.y = i;
    ColorRGB color;
    color.r = bitmapImage[k];
    color.g = bitmapImage[k+1];
    color.b = bitmapImage[k+2];

  5. #5
    Futur Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    Salut,
    Ca ne serait pas plutôt ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    p.x = j;
    p.y = i;
    ColorRGB color;
    color.r = bitmapImage[k];
    color.g = bitmapImage[k+1];
    color.b = bitmapImage[k+2];
    pour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ColorRGB color;
    color.r = bitmapImage[k];
    color.g = bitmapImage[k+1];
    color.b = bitmapImage[k+2];
    C'est juste une faute d'orhtographe dans la répétition de color.r en copiant le code de l'IDE.

    Mais pour :
    j'ai dégà inversé i avec j mais ca ne change rien et l'image s'affiche inversé de l'autre côté.

Discussions similaires

  1. Afficher Image en mémoire
    Par Ishida dans le forum ASP.NET
    Réponses: 9
    Dernier message: 29/07/2008, 11h59
  2. Afficher un JPEG déjà chargé en mémoire
    Par genetin dans le forum C
    Réponses: 1
    Dernier message: 18/07/2008, 21h47
  3. Stocker une image Bitmap dans un tableau
    Par ctn82 dans le forum C++
    Réponses: 1
    Dernier message: 04/03/2008, 15h16
  4. Réponses: 6
    Dernier message: 22/12/2004, 11h00
  5. Afficher et comparer 2 images bitmap
    Par leplusnul dans le forum MFC
    Réponses: 2
    Dernier message: 12/01/2004, 16h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo