begin process at 2012 02 12 13:53:49
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > LOADER BMP + TRAITEMENT

LOADER BMP + TRAITEMENT


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Divers Classé sous :loader, bitmap, bmp, filtrage Niveau :Initié Date de création :09/08/2005 Date de mise à jour :23/02/2010 17:17:19 Vu / téléchargé :18 981 / 4 057

Auteur : buno

Ecrire un message privé
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (38)
Ajouter un commentaire et/ou une note


 Description

Cette source permettra -j'espère- à bon nombre d'entre-vous de se familiariser avec le format BMP et avec le traitement d'images.

Cette classe permet d'ouvrir une image BMP et de la sauver sur le disque. Pour ce faire, elle utilise une matrice de pixels au format RGB. Elle peut également appliquer sur cette image plusieurs traitements relativement simples (opérations logiques avec une autre image, filtrage,...)

Elle permet également de faire différents traitement sur l'image: changement d'espace de couleurs, opérations logiques, détection de contours,...

Pour plus de détails, se référer au fichier bmp.h (commentaires en français)

NB: des images sont fournies à titre d'exemple



 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

11 août 2005 18:29:00 :
- Modification du chargement: FILE * remplacé par std::ifstream - Ajout des formats 8,16 et 32 bits
12 août 2005 16:45:38 :
- Ajout des fonctions d'accès aux membres de la classe - Ajout de la fonction Copy: permet de copier une région d'une bitmap vers une autre...en prenant en compte le clipping - Découverte d'un bug et correction de celui-ci aussitôt: le scanline était inversé :) (origine en bas à gauche) - Peinture sur code
07 septembre 2005 16:10:24 :
Ajout d'opérateurs simples + changement d'espace de couleurs (RGB, YUV, niveaux de gris) + ajout de la convolution + correction d'un bug dans le cas d'une ré-utilisation de l'image après un enregistrement
09 septembre 2005 17:33:38 :
Ajout de la détection de contour et du seuillage + ajout de protection + ajout d'opérateurs pratiques
24 novembre 2005 11:06:04 :
Ajout de mots-clés
21 février 2008 14:27:56 :
Suppression de code mort
11 juillet 2008 11:38:37 :
- Correction de la gestion des images 32 bits (matrice RBGA plutôt que RGB) - Petites optimisations du code (suppression de code mort)
11 juillet 2008 11:40:48 :
Correction dans la gestion des images 32 bits (matrice RGBA plutôt que RGB) et petites optimisations du code (suppression de code mort)
23 février 2010 17:16:57 :
Ajout d'une fonction Crop() qui retaille une image suivant un rectangle donné
23 février 2010 17:17:19 :
Ajout d'une fonction Crop() qui retaille une image suivant un rectangle donné

 Sources du même auteur

Source avec Zip DÉTECTION DE LANCEMENT D'APPLICATION (WIN32, REGISTERSHELLHO...
RÉCUPÉRATION DE L'URL COURANTE DANS INTERNET EXPLORER
Source avec Zip Source avec une capture IMPLÉMENTATION DE LA GESTION STANDARD DES CHAINES DE CARACTÈ...
Source avec Zip PRÉSENTATION DE DOXYGEN
SUPPRIMER UNE CHAINE DE CARACTERES D'UN FICHIER

 Sources de la même categorie

Source avec Zip ÉDITEUR DE RECTANGLES EN CONSOLE par seoseo
CONVERSION DE FICHIER EN FICHIER BMP par seoseo
Source avec Zip DETECTEUR EJP par idpro
Source avec Zip Source avec une capture SHOP MANAGER CONSOLE SUR WINDOWS par antho974
Source avec Zip JOUR DE NAISSANCE par fredg19

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture [C, WIN32/LINUX] LIB POUR TRAVAILLER DES IMAGES BITMAPS par katsankat
Source avec Zip Source avec une capture IMPRIMEUR D'IMAGES BMP (API) par racpp
Source avec Zip Source avec une capture AFFICHER UNE BITMAP DANS UNE FENETRE WINDOWS [WIN32,WINGDI32... par wina
Source avec Zip Source avec une capture BMP -> JPEG (JPG) PAR LIBRAIRIE FREEIMAGE ET DEV-C++ par yoyo269
Source avec Zip BMP FILE DEPUIS HDC EN PUR API (WIN32) par BruNews

Commentaires et avis

Commentaire de Pistol_Pete le 27/09/2006 20:05:21

Salut
J'aime bien ta classe bitmap surtout les fonctions AND OR XOR sur les images. Pour faire de la morphologie, ces fonctions sont extrèmement intéressante...
Sinon tu pourrais amméliorer tes filtres. Sobel et prewitt sont des filtres monodirectionnels. Il faudrait pouvoir les appliquer dans les 8 directions de l'image. Cela amméliore grandement la detection des contours lorsque l'on additionne les 8 images.

Commentaire de buno le 27/09/2006 20:36:38 administrateur CS

Ok, je vais penser à les améliorer et à rajouter quelques traitements.
Voire même, je pourrais faire une appli graphique!
Je vais essayer de trouver le temps...

Commentaire de skone007 le 06/02/2008 13:30:03

J'ai un problème quand on lit misc.cpp qui est l'instance d'un classe CHistogramme le fichier inclus Histogramme.h j'ai d'abord cru à une erreur et j'ai voulu mettre #include "misc.h" mais dans misc.h il n'y a aucune class CHistogramme...

Commentaire de buno le 07/02/2008 10:13:08 administrateur CS

Tiens effectivement...tu as raison. Il a fallu 2 ans quand même avant que quelqu'un le remarque :)
Je m'étais promis de faire un upgrade un jour...je vais devoir me presser :P

NB: si tu en as besoin (envoie-moi un MP), je peux t'envoyer une version qui fonctionne.

Commentaire de buno le 21/02/2008 14:32:38 administrateur CS

Bonjour à tous,
Je viens de mettre à jour l'archive suite à la (bonne) remarque de Skone007.

Promis, j'essaie de trouver le temps d'y ajouter des fonctionnalités :P

Commentaire de codures le 25/05/2008 11:55:26

Salut,
Je viens 2 télécharcher le zip.
E bah "histogram.h" n'est tj pas la.

Commentaire de skone007 le 25/05/2008 12:13:56

en effet

Commentaire de buno le 25/05/2008 12:17:57 administrateur CS

Non, mais le projet n'en a pas besoin. Pour en être sûr, tu peux supprimer le fichier misc.cpp (je pensais d'ailleurs l'avoir fait...).
Normalement, tu ne dois pas avoir de problème, ni à la compilation, ni à l'exécution.

Commentaire de skone007 le 25/05/2008 12:56:32

Mais l'histogramme peut être utiles pour appliquer des filtres.

Commentaire de buno le 25/05/2008 14:53:56 administrateur CS

Bien sûr. Mais ma source ne l'implémente pas pour l'instant. Après, livre à toi de l'ajouter...

Commentaire de skone007 le 25/05/2008 16:25:11

plutôt libre à moi de me livrer à l'ajout de cette fonction

Commentaire de youp_youp_ le 04/07/2008 11:00:43

Je crois bien que la transformation en niveau de gris ne marche pas avec ton programme (pour les 32bits). Je soupçonnerai bien une erreur au niveau de la palette.

Commentaire de buno le 04/07/2008 14:19:57 administrateur CS

Effectivement, bug reproduit. Mince!
Cela ne vient pas de la palette car en 32 bits, tu n'en as pas.
Le problème est plus général en fait: si tu ouvres une 32 bits et que tu la sauve dans la foulée, y'a un souci.
J'investigue et je te tiens au courant.
@+
Buno.

Commentaire de youp_youp_ le 04/07/2008 14:29:31

Merci beaucoup pour ta réactivité (3h pour me répondre alors que le forum n'a pas changé depuis 2 mois, chapeau)

Commentaire de youp_youp_ le 11/07/2008 10:29:04

Tu avances dans ton investigation?

Commentaire de buno le 11/07/2008 11:01:10 administrateur CS

Oups....
Oui, pardon, j'ai trouvé le problème. Je pensais juste faire 2 ou 3 modifs supplémentaires, en passant.
Je postes la mise à jour dans l'après-midi (si j'oublies pas :P)

Commentaire de youp_youp_ le 11/07/2008 11:04:37

Ok pas de soucis. "Par avance merci" (si t'oublies pas le post) :)

Commentaire de shintaa le 03/09/2008 21:04:01

Coucou,

Après une journée entière de débug il s'avère que l'image bmp1.bmp est bugué. En effet width * height / 8 est différent de ImageSize (il est plus grand). Ca pose un problème car l'image n'est pas complète. Avec une image créer à partir de paint ca marche. Si les explications ne sont pas claires préviens moi.

Voila il suffit donc juste de changer l'image :p

Commentaire de shintaa le 26/09/2008 10:10:09

Il y a un autre bug ds ton loader bmp. Lorsque tu récupère les données de l'image dans tes différents load, tu commences à l'adresse 0x36 + nbPaletteEntry*4. Mais le début des données ne correspond pas toujours à la fin de la palette. En fait il faut utiliser le champs offset pour se positionner pile devant les données. Ensuite dans le save soit il faut te positionner au meme offset pour écrire l'image, soit il faut modifier le champ offset (0x36 + nbPaletteEntry*4) pour écrire la donnée juste après la palette. L'offset est différent selon qu'on crée un bmp avec paint ou photoshop.

Commentaire de buno le 26/09/2008 11:08:34 administrateur CS

Hum...je crois me rappeler qu'il y a effectivement une spécificité pour les BMP écrite par Photoshop.
Je vais donc me relancer dans le code.
Merci de l'info!

Commentaire de rudaboy le 07/12/2009 15:04:19

Bonjour,
j'ai un petit problème, je n'arrive pas a utiliser la fonction de détection de contours, comment doit on l'utiliser?
Merci de me répondre

Commentaire de buno le 07/12/2009 15:18:47 administrateur CS

Hello,
Tu peux utiliser la fonction EdgeDetection() qui prend en paramètre:
- le filtre à utiliser: Laplacien, Prewitt ou Sobel
- la valeur du seuil pour binariser l'image.

Par exemple:
  CBmp source;
  CBmp * result;

  source.Load("bmp24.bmp");
  result=source.EdgesDetection(LAPLACIAN,100);
  result->Save("laplacien.bmp");
  delete result;
  printf("Laplacien fini\n");


Commentaire de rudaboy le 07/12/2009 16:12:07

Merci beaucoup pour ta réponse express!!
Chapeau bas pour ta réactivité....!!!

Commentaire de nob17 le 22/02/2010 16:14:08

Bonjour Buno,

comment utiliser la fonction copy ?
je dois couper en bandes un bmp,
je suis débutant en C++ et ne ne parviens pas à utiliser ta fonction, qui semble pouvoir répondre à mes besoins.
merci


Commentaire de buno le 22/02/2010 16:43:11 administrateur CS

// Copie tout ou partie d'une bitmap source dans la courante
bool Copy(CBmp &Source,int *Xsrc,int *Ysrc,int *Xdest,int *Ydest,int *Xsize,int *Ysize);

Explication des paramètres:
- Source = image source dans laquelle tu veut puiser tes bandes
- Xsrc, Ysrc = coordonnées du point haut-gauche de ta bande dans l'image source (mis en pointeur car peut être modifier si tu fournis un point en dehors de l'image. Alors, je clippe à la taille de l'image)
- Xdest, Ydest = coordonnées du point haut-gauche de ta bande dans l'image destination (même remarque pour les pointeurs)
- Xsize = taille en X de la zone à copier
- Ysize = taille en Y de la zone à copier

Est-ce que cela répond à ta question?

Commentaire de nob17 le 23/02/2010 11:49:45

Merci Buno pour ta réponse si rapide et détaillée.
mais...comme je te l'ai dis, je débute en C++, et c'est certainement tout bête mais je ne parviens pas à passer le nom de fichier à la variable.
désolé de poser une question aussi basique...
merci

Commentaire de buno le 23/02/2010 11:53:58 administrateur CS

Il faut faire une ouverture d'image au préalable.
Regardes l'exemple que je fourni dans le zip.

Commentaire de nob17 le 23/02/2010 12:06:15

Merci a nouveau de ta promptitude à répondre.

Est ce que ceci devrait marcher ?

  CBmp source;

  source.Load("11.bmp")
  source.Copy(source,568,1782,100,1782,100,1782);
  source.Save("11result.bmp");

ça bloque dés la compil.
merci

Commentaire de buno le 23/02/2010 14:20:58 administrateur CS

Non, ça ne marche pas: la fonction prend des pointeurs en entrée, comme je l'ai déjà indiqué.
De plus, tu écrases l'image source en faisant ça, ce n'est pas ce que tu veux je pense.
Tu peux faire comme ceci:
  source.Load("11.bmp");
  int xSrc=568;
  int ySrc=1782;
  int xDest=100;
  int yDest=1782;
  int xSize=100;
  int ySize=1782;
  result = new CBmp(source);
  result->Copy(source,&xSrc,&xSrc,&xDest,&yDest,&xSize,&ySize);
  result->Save("11result.bmp");
  delete result;

Commentaire de nob17 le 23/02/2010 15:04:07

Merci infiniment Buno !
J'arrive maintenant bien à compiler.
Je n'ai plus qu'à essayer de modifier cela pour obtenir un nouveau fichier contenant uniquement la bande extraite, et non une copie de celle ci sur l'image d'origine...
Une suggestion serait super bienvenue...si quelqu'un a un peu de temps à accorder au boulet que je suis (ce n'est pas mon habitude, mais là il faut bien le reconnaitre)
Merci encore Buno de m'avoir aidé.

Commentaire de buno le 23/02/2010 16:58:16 administrateur CS

Nob17, je viens d'implémenter la fonction Crop() pour ton besoin.
Je fais encore 2, 3 tests et je postes ma mise à jour

Commentaire de nob17 le 23/02/2010 19:12:36

Merci Buno,
de mon coté, j'avais commencé à modifier la fonction Save, j'arrive a creer un nouveau bmp avec les pixels dont j'ai besoin, mais avec le header du bmp d'origine, j'étais donc en train d'essayer de coder une New_header lorsque tu a posté...
Comment te remercier...tiens je vois que tu t'appelle Buno et moi Bruno...Si tu veux, je te donne mon "r".
Merci encore de partager si volontier le fruit de ton labeur...

Commentaire de buno le 24/02/2010 09:14:45 administrateur CS

Dis-moi si cela te convient...
Merci de ta proposition, mais il paraît que "je ne manque pas d'air", d'où mon pseudo :P

Commentaire de nob17 le 25/02/2010 07:56:08

Cela me convient parfaitement Buno,
merci et merci encore...
Bruo ( c'est vrai, après tout, pourquoi s'encombrer de 'n'):P

Commentaire de nob17 le 25/02/2010 14:15:29

Bonjour Buno,
J'ai constaté après différents tests (sur du bmp 8bits)que le crop ne fonctionnait pas pour les bmp destination dont le xSize n'était pas un multiple de 4. Je découpe des bandes de 100 pixels et cela n'avait donc pas d'incidence dans mon application, j'ai tout de même cherché, par curiosité et envie d'apprendre, une solution. Cela m'a conduit a mieux comprendre ton code (encore merci) en cherchant à corriger le problème au lieu de d'abuser à nouveau de ton temps.J'ai donc appris ce qu'était le padding, et réalisé que la correction de celui ci avait été omise dans la fonction crop, j'y ai donc rajouté ceci :

//Ajust Padding
m_Header.m_WidthUseLess=*Xsize%4;

(Après avoir tenté, en bon débutant :
int ent=*Xsize/4;
m_Header.m_WidthUseLess=(*Xsize/4)-ent;)  

Bruo

Commentaire de buno le 26/02/2010 09:42:13 administrateur CS

Hello,
Ah oui, bien vu! Du coup, j'ai le même problème sur les images 4bits et 1bit.
Je mets à jour dès que je peux.
Thanks!

Commentaire de IamFliT le 02/02/2011 08:24:17

Salut BUNO, je t'ai envoyé un mp.

peux-tu me répondre ?

merci.

Commentaire de buno le 02/02/2011 11:06:22 administrateur CS

re,
Je repostes ta question:
"J'ai une image bitmap qui fait 24 bits par pixel (ImageX), j'aimerai la passer en 8 bits par pixel (ImageY), je suppose donc qu'il faut utiliser la fonction Save8bpp

source.Load("ImageX.bmp");
source.Save8bpp("ImageY.bmp");

est la ERROR !"

Réponse: Effectivement, tu ne peux pas utiliser directement la fonction Save8bpp() car il y a des traitements à faire avant: copie du header, de la palette...que tu peux trouver dans la fonction Save. Essaies donc de modifier la fonction Save suivant ton besoin, dans un 1er temps. De mon côté, j'essaie de modifier mon code pour permettre un enregistrement suivant un bpp demandé.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

allegro+probleme de creation de buffer dans une fonction [ par xboxut ] salut je suis en train de monter mon moteur 2D avec allegro et j ai un bleme au niveau d une fonction.void buffscroll(BITMAP *bmp) //la c la fonction chargement dynamique d'image (bitmap ?) [ par Gendal67 ] Bonsoir,J'aimerai savoir si une application peut charger autre chose qu'une image bmp comme une image jpg....genre comme :BMP BITMAP DISCARDABLE "lol. Charger un BMP avec une OpenFileDialog et l'afficher dans un pictureBox . [ par Dragoon ] Bonjour à tous,Je ne suis pas un spécialiste du C++ et des MFC et je souhaiterais comprendre ce qui ne va pas dans mon programme.Je voudrais que celui Convertion d'un bitmap 8 bits en un bitmal 24 bits [ par SauCisS ] Bonjour, J'ai parcouru ce forum pour chercher ma réponse, mais sans succès. Alors voici mon problème : Comment à partir d'une Redimensionnement image Borland C++ [ par jfouquet ] Bonjour, Je travaille actuellement sous Borland C++ 5. Je suis amené à afficher une image (jpeg,bmp,ico…) dans un TImage bon ça bitmap miniature = icon ou bitmap (comme explorateur win ) [ par gege1024 ] je cherche a faire des bitmap miniature comme pour l'explorateur windows.j'ai un dial où je selectionne des fichiers(uniquement des bmp) , j Modification de fichier BMP [ par titio ] Bonjour,Je souhaite afficher des images bmp, tout en ayant la possibilité de modifier ce fichier. Pour cela, je le charge en memoire, et souhaite Mes bitmap se barrent [ par oceax ] Salut !Voila j'ai fais une boite de dialogue en Win32 et j'ai inséré une bmp à l'aide de LoadBitmap() et pis DrawState(). Ma bitmap s'a Hwnd [ par T_Mehdi ] salut a tous .bon j'ai realiser une fonction qui permet douvrir des fichier bmp et les affichier sur un hwnd preci.le prob est que quand je reduit ou problème de chargement de bitmap [ par Batman60 ] bonjour y a pas moyen de charger des bitmaps avec  la fonction :gluBuild2DMipmaps(GL_TEXTURE_2D, 3, BMP.bmWidth, BMP.bmHeight,   


Nos sponsors


Sondage...

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 : 5,881 sec (4)

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