begin process at 2012 02 12 10:47:56
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Graphique

 > BINARISER UN BMP [VC++]

BINARISER UN BMP [VC++]


 Information sur la source

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Graphique Niveau :Débutant Date de création :18/03/2003 Date de mise à jour :18/03/2003 23:10:45 Vu :5 630

Auteur : FloZix

Ecrire un message privé
Site perso
Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note

 Description

Permet de binariser un fichier bmp. Le code ne transforme pas la palette mais chaques pixels de l'image.
J'utilise un fichier entetebmp.h qui contient des structures permettant de recupérer les entetes et la palette.

Source

  • #include <iostream>
  • #include "entetebmp.h"
  • char bin_bmp (char src[], char dest[])
  • {
  • BMPINFO entete;//premiere partie de l'entete
  • WININFOHEAD entete2;//deuxieme partie
  • WINRGBQUAD * palette;//ptr sur la palette de couleurs
  • unsigned char * image;//ptr sur le buffer de l'image
  • unsigned int taille_image=0;//taille de l'image en octet
  • char erreur=0;
  • FILE* ptr_src;//pointeur sur le fichier source
  • FILE* ptr_dest;//pointeur sur le fichier destination
  • if((ptr_src=fopen(src,"rb"))!=NULL)
  • {
  • //recup les infos
  • fread(&entete,sizeof(BMPINFO),1,ptr_src);
  • //verife si bmp
  • if(entete.Type==0x4d42)
  • {
  • fread(&entete2,sizeof(WININFOHEAD),1,ptr_src);
  • //on creer un buffer pour stocker la palette
  • palette=new WINRGBQUAD[entete2.ClrUsed];
  • fread(palette,sizeof(WINRGBQUAD),entete2.ClrUsed,ptr_src);
  • taille_image=((entete2.Height*entete2.Width)*(entete2.BitCount/8));
  • //on creer un buffer pour stocker l'image
  • image=new unsigned char[taille_image];
  • //on recupere
  • fread(image,sizeof(char),taille_image,ptr_src);
  • fclose(ptr_src);
  • //on binarise a 0x80
  • for(int i=0; i!=taille_image; i++)
  • if(image[i]<0x80)
  • image[i]=0x00;
  • else
  • image[i]=0xff;
  • //ouvre ou creer le fichier de destination
  • if((ptr_dest=fopen(dest,"wb"))!=NULL)
  • {
  • fwrite(&entete,sizeof(BMPINFO),1,ptr_dest);
  • fwrite(&entete2,sizeof(WININFOHEAD),1,ptr_dest);
  • fwrite(palette,sizeof(WINRGBQUAD),entete2.ClrUsed,ptr_dest);
  • fwrite(image,sizeof(char),taille_image,ptr_dest);
  • fclose(ptr_dest);
  • }
  • else
  • erreur=3;//pb ac fichier destination
  • //libere la memoire
  • delete []palette;
  • delete []image;
  • }
  • else
  • erreur=1;//le fichier n'est pas un bmp
  • }
  • else
  • erreur=2;//pb ac fichier source
  • return(erreur);
  • }
  • /***********************************************************
  • ***************** FICHIER entetebmp.h ************************
  • ***********************************************************/
  • /*
  • ** BMP File Format Bitmap Header.
  • */
  • typedef struct _BmpInfo /* Offset Description */
  • {
  • WORD Type; /* 00h File Type Identifier (4D42h) */
  • DWORD FileSize; /* 02h Size of File */
  • WORD Reserved1; /* 06h Reserved (should be 0) */
  • WORD Reserved2; /* 08h Reserved (should be 0) */
  • DWORD Offset; /* 0Ah Offset to bitmap data */
  • } BMPINFO;
  • /*
  • ** Windows 3.x Information Header Format.
  • */
  • typedef struct _WinInfoHeader /* Offset Description */
  • {
  • DWORD Size; /* 0Eh Size of Remianing Header */
  • DWORD Width; /* 12h Width of Bitmap in Points */
  • DWORD Height; /* 16h Height of Bitmap in Points */
  • WORD Planes; /* 1Ah Number of Planes */
  • WORD BitCount; /* 1Ch Bits Per Point */
  • DWORD Compression; /* 1Eh Compression Scheme (0=none) */
  • DWORD SizeImage; /* 22h Size of bitmap in bytes */
  • DWORD XPelsPerMeter; /* 26h Horz. Resolution in Points/Meter */
  • DWORD YPelsPerMeter; /* 2Ah Vert. Resolution in Points/Meter */
  • DWORD ClrUsed; /* 2Eh Number of Colors in Color Table */
  • DWORD ClrImportant; /* 32h Number of Important Colors */
  • } WININFOHEAD;
  • /*
  • ** Windows 3.x RGB Color Quadruple.
  • */
  • typedef struct _WinRgbQuad
  • {
  • BYTE rgbBlue; /* Blue Intensity Value */
  • BYTE rgbGreen; /* Green Intensity Value */
  • BYTE rgbRed; /* Red Intensity Value */
  • BYTE rgbReserved;
  • /* Reserved (should be 0) */
  • } WINRGBQUAD;
#include <iostream>
#include "entetebmp.h"


char bin_bmp (char src[], char dest[])
{
	BMPINFO entete;//premiere partie de l'entete
	WININFOHEAD entete2;//deuxieme partie
	WINRGBQUAD * palette;//ptr sur la palette de couleurs
	unsigned char * image;//ptr sur le buffer de l'image
	unsigned int taille_image=0;//taille de l'image en octet
	char erreur=0;

	FILE* ptr_src;//pointeur sur le fichier source
	FILE* ptr_dest;//pointeur sur le fichier destination

	if((ptr_src=fopen(src,"rb"))!=NULL)
	{
		//recup les infos
		fread(&entete,sizeof(BMPINFO),1,ptr_src);

		//verife si bmp
		if(entete.Type==0x4d42)
		{
			fread(&entete2,sizeof(WININFOHEAD),1,ptr_src);

			//on creer un buffer pour stocker la palette
			palette=new WINRGBQUAD[entete2.ClrUsed];

			fread(palette,sizeof(WINRGBQUAD),entete2.ClrUsed,ptr_src);
			taille_image=((entete2.Height*entete2.Width)*(entete2.BitCount/8));
			
			//on creer un buffer pour stocker l'image
			image=new unsigned char[taille_image];

			//on recupere
			fread(image,sizeof(char),taille_image,ptr_src);
			fclose(ptr_src);

			//on binarise a 0x80
			for(int i=0; i!=taille_image; i++)
				if(image[i]<0x80)
					image[i]=0x00;
				else
					image[i]=0xff;

			//ouvre ou creer le fichier de destination
			if((ptr_dest=fopen(dest,"wb"))!=NULL)
			{
				fwrite(&entete,sizeof(BMPINFO),1,ptr_dest);
				fwrite(&entete2,sizeof(WININFOHEAD),1,ptr_dest);
				fwrite(palette,sizeof(WINRGBQUAD),entete2.ClrUsed,ptr_dest);
				fwrite(image,sizeof(char),taille_image,ptr_dest);
				fclose(ptr_dest);
			}
			else
				erreur=3;//pb ac fichier destination
			//libere la memoire
			delete []palette;
			delete []image;
		}
		else
			erreur=1;//le fichier n'est pas un bmp
	}
	else
			erreur=2;//pb ac fichier source

	
	return(erreur);
}

/***********************************************************
***************** FICHIER entetebmp.h ************************
***********************************************************/
/*
**  BMP File Format Bitmap Header.
*/
typedef struct _BmpInfo     /* Offset   Description                      */
{
    WORD   Type;            /*  00h     File Type Identifier (4D42h)     */
    DWORD  FileSize;        /*  02h     Size of File                     */
    WORD   Reserved1;       /*  06h     Reserved (should be 0)           */
    WORD   Reserved2;       /*  08h     Reserved (should be 0)           */
    DWORD  Offset;          /*  0Ah     Offset to bitmap data            */
} BMPINFO;

/*
**  Windows 3.x Information Header Format.
*/
typedef struct _WinInfoHeader   /* Offset  Description                      */
{
    DWORD  Size;                /*  0Eh    Size of Remianing Header         */
    DWORD  Width;               /*  12h    Width of Bitmap in Points        */
    DWORD  Height;              /*  16h    Height of Bitmap in Points       */
    WORD   Planes;              /*  1Ah    Number of Planes                 */
    WORD   BitCount;            /*  1Ch    Bits Per Point                   */
    DWORD  Compression;         /*  1Eh    Compression Scheme (0=none)      */
    DWORD  SizeImage;           /*  22h    Size of bitmap in bytes          */
    DWORD  XPelsPerMeter;       /*  26h    Horz. Resolution in Points/Meter */
    DWORD  YPelsPerMeter;       /*  2Ah    Vert. Resolution in Points/Meter */
    DWORD  ClrUsed;             /*  2Eh    Number of Colors in Color Table  */
    DWORD  ClrImportant;        /*  32h    Number of Important Colors       */
} WININFOHEAD;

/*
**  Windows 3.x RGB Color Quadruple.
*/
typedef struct _WinRgbQuad
{
	BYTE   rgbBlue;             /* Blue Intensity Value   */
    BYTE   rgbGreen;            /* Green Intensity Value  */
    BYTE   rgbRed;				/* Red Intensity Value    */
	BYTE   rgbReserved;
             /* Reserved (should be 0) */
} WINRGBQUAD;
 

 Conclusion

A noter qu'il faut que dans les options de compilation aligner les structures sur 1 ou 2 octets (project settings-&gt;C/C++-&gt;code generation-&gt;struct member alignment :: pour vc++).


 Sources de la même categorie

Source avec Zip APPLICATION DE DESSIN DE QUELQUES FIGURES par laguchori
Source avec Zip Source avec une capture HDR EXPOSURE FUSION par mecrosoft
Source avec Zip Source avec une capture IRC CLIENT MULTISERVEUR EN MFC (TXIRC) par TeniX
Source avec Zip ENTETE DU FICHIER BMP (BIPMAP) par k.Lutchi
Source avec Zip Source avec une capture XCOUPE : COUPE 2D par pop70

Commentaires et avis

Commentaire de nicoloyo le 28/10/2003 21:12:44

Je vais peut-être avoir l'air bête mais à quoi ça sert?
Est-ce réverssible?
Ca veut dire quoi binariser?

Merci!

Commentaire de kisscool19812002 le 22/09/2004 11:21:05

ca veut dire qu'il a la gaule en voyant les seins dla meuf en binaire

Commentaire de abdoulax le 02/04/2008 16:50:17

Merci, sa me sauve la vie... Perso sa va me servir à afficher une image BMP sur un écran d'un système embarqué. Alors Kisscool va joué au bille!

Commentaire de odumange le 03/03/2010 15:18:37

bon code

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,494 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales