cs_mat74
Messages postés241Date d'inscriptiondimanche 10 août 2003StatutMembreDernière intervention16 juin 2010
-
22 mai 2004 à 19:32
cs_mat74
Messages postés241Date d'inscriptiondimanche 10 août 2003StatutMembreDernière intervention16 juin 2010
-
25 mai 2004 à 12:15
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 )
cs_JCDjcd
Messages postés1138Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention25 janvier 20094 23 mai 2004 à 10:41
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
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 23 mai 2004 à 12:08
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).
cs_mat74
Messages postés241Date d'inscriptiondimanche 10 août 2003StatutMembreDernière intervention16 juin 2010 23 mai 2004 à 21:33
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 .
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 23 mai 2004 à 22:51
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).
Vous n’avez pas trouvé la réponse que vous recherchez ?
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 24 mai 2004 à 13:33
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"
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 24 mai 2004 à 13:36
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"
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 24 mai 2004 à 13:38
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"
cs_mat74
Messages postés241Date d'inscriptiondimanche 10 août 2003StatutMembreDernière intervention16 juin 2010 24 mai 2004 à 18:10
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 .
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 24 mai 2004 à 22:43
Ca doit provenir de ton fichier de test car j'ai essayé et ca marche (avec un bitmap de 128*128 en 24bpp soit 16.7 millions de couleurs). Le fichier généré est identique au fichier initial.