begin process at 2012 05 28 17:39:44
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

bmp


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

bmp

samedi 22 mai 2004 à 19:32:53 | bmp

mat74


salut a ts

voila j'aimerai bien ouvrir un fichier bmp et remplacer les pixel noir a l'interieur par des violet . j'ai deja essayer des truc et je ni arrive pas . (j'arrive a lire les pixel mais pas a les changer )

merci d'avance
@+
dimanche 23 mai 2004 à 10:41:26 | Re : bmp

JCDjcd

Tu fais quoi pour les changes ?
Tu fais :
* tu charges ta bitmap avec LoadBitmap ou LoadImage
* GetDIBits
* tu changes les pixels
* tu fais SetDIBits
* tu la sauves dans le fichier
dimanche 23 mai 2004 à 12:08:03 | Re : bmp

ymca2003

Ma source paint contient dans la classe BmpDoc toutes les fcts qui te sont nécessaire (ouverture bitmap, récupération bitmap, modification pixel, enregistrement bitmap).

http://www.cppfrance.com/code.aspx?ID=21052
dimanche 23 mai 2004 à 21:33:57 | Re : bmp

mat74


voila j'ai trouver des truc mais sa marche pas pr les bitmap 24 bits . ( le prog doit copier le fichier bmp ) . sa marche seulement pr les 8 bits . je pense que c'est un truc avec la taille des pixel qui va pas , mais je sais pas precisement .

voila le code


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

typedef struct
{
BITMAPFILEHEADER file;
BITMAPINFOHEADER info;
}HEADER;

typedef struct
{
BYTE bleu;
BYTE vert;
BYTE rouge;
}PIXEL;

HEADER en_tete(FILE* fd,HEADER header,char *nom_fichier)
{
fread(&header,sizeof(HEADER),1,fd);
if(header.file.bfType!=0x4D42)
{
printf("%s n'est pas un fichier bitmap\n",nom_fichier);
fclose(fd);
exit(-1);
}
return header;
}


void main ()
{

FILE *source,*nouveau;
source=fopen("teste.bmp","a+");
nouveau=fopen("new.bmp","w");

HEADER header;
header=en_tete(source,header,"teste.bmp");

fwrite(&header,sizeof(header)-2,1,nouveau);

PIXEL pixel;

pixel.bleu = pixel.rouge = pixel.vert = 0;

fseek(source,0x36,SEEK_SET);

for (int a=0; a<=128; a++)
{
for (int b=0; b<=128; b++)
{
fread(&pixel,sizeof(pixel),1,source);

PIXEL new_pixel;
if (pixel.vert>=0 && pixel.vert<=256) new_pixel.vert = pixel.vert;
if (pixel.bleu>=0 && pixel.bleu<=256) new_pixel.bleu = pixel.bleu;
if (pixel.rouge>=0 && pixel.rouge<=256) new_pixel.rouge = pixel.rouge;
/*
if (new_pixel.rouge==0 && new_pixel.bleu==0 && new_pixel.vert==0)
{new_pixel.rouge=255; new_pixel.bleu=255; }
*/
fwrite(&new_pixel,sizeof(new_pixel),1,nouveau);

cout << "sizeof(pixel) = " << sizeof(pixel) << endl;

}
}

}
dimanche 23 mai 2004 à 22:51:54 | Re : bmp

ymca2003

attention quand tu fait :
fread(&pixel,sizeof(pixel),1,source);
il se peut que tu lise plus de 3 octets, cela dépend de l'alignement des structures par le compilateur (en général multiple de 4). Il vaut mieux lire les composantes séparément.

les tests
if (pixel.vert>=0 && pixel.vert<=256)
sont inutiles car les composantes étant sur 1 octet (8 bits) les valeurs sont forcément entre 0 et 255.

Enfin, les pixels des bitmap sont stocké par ligne (en commencant par le bas sauf si la hauteur est < 0) avec une taille de ligne en octet qui doit être multiple de 4 (avec un padding si besoin).
par ex un bmp de 63 pixels de large en 24 bits/ pixels aur des lignes de 63*24 = 1512 bits = 189 octets aligné sur 192 octets (premier multiple de 4 supérieur).
lundi 24 mai 2004 à 12:50:16 | Re : bmp

mat74


voila j'ai essayer de prendre les couleur une par une .
et sa ne marche pas plus que avant ( marche pr les 8bits ms pas pr les 24 bits )

voila le code :


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

typedef struct
{
BITMAPFILEHEADER file;
BITMAPINFOHEADER info;
}HEADER;


HEADER en_tete(FILE* fd,HEADER header,char *nom_fichier)
{
fread(&header,sizeof(HEADER),1,fd);
if(header.file.bfType!=0x4D42)
{
printf("%s n'est pas un fichier bitmap\n",nom_fichier);
fclose(fd);
exit(-1);
}
return header;
}


void main ()
{

FILE *source,*nouveau;
source=fopen("teste.bmp","a+");
nouveau=fopen("new.bmp","w");

HEADER header;
header=en_tete(source,header,"teste.bmp");
fwrite(&header,sizeof(header,1,nouveau);

for (int a=0; a<128*128; a++)
{

char bleu=0,rouge=0,vert=0;

fread(&bleu,1,1,source);
fread(&rouge,1,1,source);
fread(&vert,1,1,source);

fwrite(&bleu,1,1,nouveau);
fwrite(&rouge,1,1,nouveau);
fwrite(&vert,1,1,nouveau);

}

}

si qq1 pourrai mexpliquer pr koa sa ne marche pas avec les bmp 24 bits .
lundi 24 mai 2004 à 13:33:53 | Re : bmp

ymca2003

toujours un problème d'alignement sur la structure HEADER.
BITMAPFILEHEADER fait 14 octets.
BITMAPINFOHEADER fait 40 octets.
EN regroupant ces 2 structures ensemble, le compile alignera 2ème structure sur 4 octets et la fait donc commencer à l'offset 16 (au lieu de 14). En lisant d'un coup HEADER, il y a un décalage de 2 octets.

il faut lire d'abord BITMAPFILEHEADER puis BITMAPINFOHEADER ou dire au compilo d'aligner HEADER sur 2 octets :
#include "pshpack2.h"
typedef struct
{
BITMAPFILEHEADER file;
BITMAPINFOHEADER info;
}HEADER;
#include "poppack.h"
lundi 24 mai 2004 à 13:36:13 | Re : bmp

ymca2003

toujours un problème d'alignement sur la structure HEADER.
BITMAPFILEHEADER fait 14 octets.
BITMAPINFOHEADER fait 40 octets.
EN regroupant ces 2 structures ensemble, le compile alignera 2ème structure sur 4 octets et la fait donc commencer à l'offset 16 (au lieu de 14). En lisant d'un coup HEADER, il y a un décalage de 2 octets.

il faut lire d'abord BITMAPFILEHEADER puis BITMAPINFOHEADER ou dire au compilo d'aligner HEADER sur 2 octets :
#include "pshpack2.h"
typedef struct
{
BITMAPFILEHEADER file;
BITMAPINFOHEADER info;
}HEADER;
#include "poppack.h"
lundi 24 mai 2004 à 13:38:08 | Re : bmp

ymca2003


toujours un problème d'alignement sur la structure HEADER.
BITMAPFILEHEADER fait 14 octets.
BITMAPINFOHEADER fait 40 octets.
EN regroupant ces 2 structures ensemble, le compile alignera 2ème structure sur 4 octets et la fait donc commencer à l'offset 16 (au lieu de 14). En lisant d'un coup HEADER, il y a un décalage de 2 octets.

il faut lire d'abord BITMAPFILEHEADER puis BITMAPINFOHEADER ou dire au compilo d'aligner HEADER sur 2 octets :
#include "pshpack2.h"
typedef struct
{
BITMAPFILEHEADER file;
BITMAPINFOHEADER info;
}HEADER;
#include "poppack.h"
lundi 24 mai 2004 à 18:10:39 | Re : bmp

mat74


voila j'ai reessayer qqchose en suivant tes indication et sa marche tjs pas
mais ia progres qd le bitmap ( 24bits ) est en 256 sa marche , mais qd il est en 16millions sa marche pas .

voila le code :


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

BITMAPFILEHEADER file;
BITMAPINFOHEADER info;


void main ()
{

FILE *source,*nouveau;
source=fopen("teste.bmp","a+");
nouveau=fopen("new.bmp","w");

fread(&file,sizeof(file),1,source);
fread(&info,sizeof(info),1,source);

fwrite(&file,sizeof(file),1,nouveau);
fwrite(&info,sizeof(info),1,nouveau);

cout << sizeof(file)+sizeof(info) << endl;

for (int a=0; a<128*128; a++)
{

BYTE bleu=0,rouge=0,vert=0;

fread(&bleu,1,1,source);
fread(&rouge,1,1,source);
fread(&vert,1,1,source);

fwrite(&bleu,1,1,nouveau);
fwrite(&rouge,1,1,nouveau);
fwrite(&vert,1,1,nouveau);


}

fcloseall();

}

1 2

Cette discussion est classée dans : arrive, pixel, bmp


Répondre à ce message

Sujets en rapport avec ce message

aide en c++ sur conversion d'un image bmp en matrice [ par beide ] Je suis étudiant en IUT, je n'ai jammais utilisé visual C++. <p class="MsoNormal" styl compare 2 fichier bmp => detection de pixel [ par mavric ] bonjour je cherche comment comparer 2 bmp pour faire de la detection de pixel ,mais je n'y arrive pas !!!Si vous pouviez me donner des infos ou un sou Un pro du jpeg [ par oRTEEZ ] Voila c'est ce que je cherche.Je prend n'improte quel format d'image je la met en unsigned char* pour pouvoir y acceder pixel par pixel.J'arrive a l' Image bmp à niveau de gris [ par nadine2511 ] Bonjour,je voudrais lire, traiter pixel à pixel et enregistrer une image à niveau de gris bmp (8 bits) mais je ne sais pas comment on fait. Si quelqu' Bouton enregisté [ par anaxode ] J'ai un petit problème , je voudrais enregisté le contenu de richEdit dans un fichier.J'arrive a le faire depuis une Boite de dialogue , mais j'arri [C++] Inversion BMP [ par WormsParty ] Hello tout le monde !voilà je commence à peine à programmer mon premier jeu en C++. Le personnage de déplace, saute,...Sauf que ! Il ne peux pas tourn Question a 2 balles mais j'y arrive pas!!! [ par HCJarod ] Je ravale ma fierté et je pose ma question au risque de me faire siffler : est ce que quelqu'un sais comment creer une simple fenetre (avec 2 bricolle SMS avec TAPI - j'y arrive pô :-( [ par luckyjo ] Salut à tous, j'voudrais utiliser TAPI pour envoyer des sms et de la donnée via n'importe quel modem, au moins ceux qui sont compatible avec TAPI. A Irrlicht [ par darvil ] Helpje suis désépéré.je n'arive pas a enchainer des annimation dans irrlicht le moteur 3d.je n'arrive pas n'on plus a compilé la version 6 pour avoir Comment enregistrer une fenetre HWND au format bmp? [ par izle ] IzLe,Comment enregistrer une fenetre HWND au format bmp?


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
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 : 2,839 sec (3)

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