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

 C Discussion :

Modifier un BMP


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 6
    Par défaut Modifier un BMP
    Bonjour

    Je n'arrive pas à programmer un petit .exe qui modifie un bmp.
    A partir d'une première image :

    je voudrai que le programme créer une seconde image en remplaçant une couleur par une autre, par exemple le rouge par du mauve.
    Pour cela j'ai également créer un fichier "source.txt" dans lequel il y a ça :
    1 FF0000
    2 00FF00
    3 0000FF
    4 FFFF00

    ce qui correspond aux couleurs de mes surfaces
    J'ai ensuite créé un second fichier "modif.txt" :
    1 AA6655
    2 00FF00
    3 0000FF
    4 FFFF00

    Le programme va donc lire dans le premier fichier et pour la surface "1" de couleur "FF0000" (rouge) il va changer tous les pixels en "AA6655" (selon le second fichier).

    Le programme ne doit rien afficher, juste enregistrer la nouvelle image.

    J'ai fouillé un peu sur le forum, mais même avec la SDL j'ai du mal, et en plus je ne veux pas passer par un affichage à l'écran...

    Merci de votre aide.

  2. #2
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 371
    Par défaut
    Bien le bonjour,

    Où est-ce que tu bloques ?

    Dans les grandes lignes le principe sera le suivant :
    * lire les 2 fichiers txt pour trouver les correspondances de couleurs
    * lire l'image
    * parcourir les pixels et comparer chacun d'eux à tes correspondances
    * modifier les pixels en conséquence
    * enregistrer la nouvelle image

    C'est en effet intéressant de prendre SDL pour lire, modifier et enregistrer l'image et l'utilisation de SDL ne passe pas forcément pas un affichage à l'écran

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 6
    Par défaut
    Mon problème est un peu général.
    J'arrive pas à lire et remplacer les pixels.
    Y a t'il un autre moyen plus simple qu'en passant par la SDL?
    Si quelqu'un a un petit code intéressant je suis preneur.

  4. #4
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 527
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 527
    Par défaut
    Regarde sur http://www.cplusplus.com/src/ il ya du code pour lire une BMP
    Sinon sur www.wotsit.org
    Mais c'est plus complexe que cela ce que tu demandes ; il faut savoir sur combien de bit par pixels la BMP est composée si c'est 8,16,24..
    Vaut mieux utiliser éventuellement des API de Windows avec un BITMAPINFOHEADER...
    Sinon sur le MSDN il y a du code pour écrire une BMP un peu complexe..
    Mais c'est pas du code portable de toute façon une BMP c'est spécfique à Windows.

    Si tu veux du portable prendre PNG par exemple

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Sans descendre au niveau du format de l'image et en utilisant juste une bibliothèque graphique, tu peux suivre la méthode "naïve":
    • Charger l'image en mémoire, en tant que "image" (HBITMAP + HDC pour l'API Win32, autre chose pour SDL)
    • Parcourir chaque pixel de l'image avec deux boucles imbriquées
    • Pour chacun de ces pixels, lire sa couleur (GetPixel() pour Win32) et la remplacer par la nouvelle)
    • Sauvegarder l'image

    Bien sûr, dans le cas d'un bitmap à palette (256 couleurs ou moins), on peut faire beaucoup plus rapide en changeant juste la palette, mais ça réclame plus de travail.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Nouveau membre du Club
    Inscrit en
    Mars 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 6
    Par défaut
    Merci je crois que j'avance...
    http://www.codeproject.com/KB/graphics/rplcolor.aspxJ'ai trouvé ce code, mais j'arrive pas à le compiler, et vous? J'ai peut être mal configuré codeblocks...

    Ca marche chez quelqu'un?

    voici ce que le build log m'affiche :

    Project : RplColor
    Compiler : GNU GCC Compiler (called directly)
    Directory : C:\Documents and Settings\LDriutti\Bureau\RplColor\
    --------------------------------------------------------------------------------
    Switching to target: Win32 Release
    Compiling: RplColor.rc
    Compiling: Main.cpp
    Linking executable: C:\Documents and Settings\LDriutti\Bureau\RplColor\Release\RplColor.exe
    Release\Main.o:Main.cpp.text+0x427): undefined reference to `CreateMappedBitmap@20'
    Release\Main.o:Main.cpp.text+0x75e): undefined reference to `ImageList_Destroy@4'
    Release\Main.o:Main.cpp.text+0x8a6): undefined reference to `ImageList_DrawEx@40'
    Release\Main.o:Main.cpp.text+0x97a): undefined reference to `InitCommonControls@0'
    Release\Main.o:Main.cpp.text+0x9fa): undefined reference to `ImageList_Create@20'
    Release\Main.o:Main.cpp.text+0xa11): undefined reference to `ImageList_Add@12'
    Release\Main.o:Main.cpp.text+0xa29): undefined reference to `ImageList_AddMasked@12'
    Release\Main.o:Main.cpp.text+0xa6e): undefined reference to `ImageList_AddMasked@12'
    Release\Main.o:Main.cpp.text+0xab0): undefined reference to `ImageList_AddMasked@12'
    Release\Main.o:Main.cpp.text+0xaf5): undefined reference to `ImageList_AddMasked@12'
    collect2: ld returned 1 exit status
    Process terminated with status 1 (0 minutes, 3 seconds)

Discussions similaires

  1. Réponses: 5
    Dernier message: 06/08/2008, 16h24
  2. Ouvrir et modifier une image .bmp
    Par NeMo_O dans le forum Windows
    Réponses: 5
    Dernier message: 23/03/2007, 14h04
  3. [TP]Charger un fichier bmp
    Par flavien tetart dans le forum Turbo Pascal
    Réponses: 5
    Dernier message: 30/06/2002, 19h04
  4. Réponses: 2
    Dernier message: 30/05/2002, 10h19
  5. Création image BMP
    Par Anonymous dans le forum C
    Réponses: 2
    Dernier message: 25/04/2002, 16h04

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