Page 1 sur 1

[..] Modifier une image bmp

Posté : mer. 07 mai 2008 15:04
par tolf
Bonjour,

J'ai un fichier .bmp et je voudrais faire un script qui puisse transformer tous les pixels de couleur 0xff0000 en 0x00ff00 et d'enregistrer le nouveau fichier.
Ma question est :
- Existe-t-il une fonction qui puisse lire le fichier et retourner les pixels sous une certaine forme (array, string, ou autre) ?
- Existe-t-il une fonction qui permet d'enregistrer à nouveau le fichier à partir de ce qui a été retourné par la première fonction (et que j'aurai modifié au préalable) ?

Merci de votre aide

Re: [..] Modifier une image bmp

Posté : mer. 07 mai 2008 21:34
par Tlem
J'ai jeté un oeil dans la doc, et rien vu de tel.
Par contre peut être certaines nouvelles fonction GDI peuvent aider, mais je vois pas trop comment.

Re: [..] Modifier une image bmp

Posté : jeu. 08 mai 2008 16:34
par tolf
J'ai trouvé les fonctions suivantes :
_GDIPlus_ImageLoadFromFile, qui retourne un "handle to an image object".
_GDIPlus_ImageSaveToFile, qui enregistre une image à partir d'un "handle to an image object".

Par contre, pour modifier l'image, je n'ai pas trouvé de fonction, notamment pour ce qui est de lire la couleur des pixels.

Re: [..] Modifier une image bmp

Posté : jeu. 08 mai 2008 17:25
par Tlem
Je dirais qu'il faut sans doute faire une boucle sur la surface totale du bitmap, et utiliser la fonction :

Code : Tout sélectionner

PixelGetColor ( x , y )
pour récupérer la couleur de chaque pixel et utiliser la fonction

Code : Tout sélectionner

GUICtrlSetGraphic ( controlID, type [, par1 [, ... par6]] )
pour faire le remplacement de couleur.

Je n'ai rien essayé, mais ça me parait logique. ;)

Re: [..] Modifier une image bmp

Posté : ven. 09 mai 2008 15:10
par tolf
oui mais

Code : Tout sélectionner

PixelGetColor ( x , y )
retourne la couleur des pixels de l'écran :(, et pas de ceux du "handle to an image object".

Re: [..] Modifier une image bmp

Posté : ven. 09 mai 2008 15:21
par tolf
J'ai essayé ce bout de code :

Code : Tout sélectionner

:#include <GUIConstants.au3>
#include <GDIPlus.au3>

$fichier = FileOpenDialog("Choisissez une image bitmap", @ScriptDir, "Fichiers bitmap (*.bmp)")

_GDIPlus_Startup()

$himage = _GDIPlus_ImageLoadFromFile($fichier)
GUICtrlSetGraphic($himage, $GUI_GR_COLOR, 0xff0000)
For $x = 1 To _GDIPlus_ImageGetWidth($himage)
    For $y = 1 To _GDIPlus_ImageGetHeight($himage)
        GUICtrlSetGraphic($himage, $GUI_GR_PIXEL, $x, $y)
    Next
    TrayTip($fichier, "col : " & $x, 5) ; permet de tester la colonne en cours
Next

_GDIPlus_ImageSaveToFile($himage ,StringTrimRight($fichier, 4) & "2.bmp")

_GDIPlus_ShutDown()
mais l'image de sortie est identique à celle de départ donc la fonction :

Code : Tout sélectionner

GUICtrlSetGraphic
ne me semble pas être adapté dans ce cas (l'image n'est de toute façon pas un contrôle GUI ^^)

Re: [..] Modifier une image bmp

Posté : mer. 14 mai 2008 14:21
par tolf
Sinon, n'y-a-t-il pas moyen de lire les pixels directement dans le fichier avec des FileRead pour les modifier ?

Re: [..] Modifier une image bmp

Posté : mar. 19 août 2008 16:23
par tolf
Bon j'ai cherché sur le forum anglais et j'ai finalement trouvé : http://www.autoitscript.com/forum/index ... l=lockbits
► Afficher le texteexemple de code
Le code ajoute un carré vert à l'image chargée.