[..] Modifier une image bmp

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
tolf
Niveau 7
Niveau 7
Messages : 318
Enregistré le : ven. 15 févr. 2008 12:25
Localisation : Paris
Status : Hors ligne

[..] Modifier une image bmp

#1

Message 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
Lisez la documentation d'AutoIt en français (et participez svp :mrgreen:) !

Mes UDF :
[/i][/b]
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11784
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Modifier une image bmp

#2

Message 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.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
tolf
Niveau 7
Niveau 7
Messages : 318
Enregistré le : ven. 15 févr. 2008 12:25
Localisation : Paris
Status : Hors ligne

Re: [..] Modifier une image bmp

#3

Message 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.
Lisez la documentation d'AutoIt en français (et participez svp :mrgreen:) !

Mes UDF :
[/i][/b]
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11784
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Modifier une image bmp

#4

Message 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. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
tolf
Niveau 7
Niveau 7
Messages : 318
Enregistré le : ven. 15 févr. 2008 12:25
Localisation : Paris
Status : Hors ligne

Re: [..] Modifier une image bmp

#5

Message 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".
Lisez la documentation d'AutoIt en français (et participez svp :mrgreen:) !

Mes UDF :
[/i][/b]
tolf
Niveau 7
Niveau 7
Messages : 318
Enregistré le : ven. 15 févr. 2008 12:25
Localisation : Paris
Status : Hors ligne

Re: [..] Modifier une image bmp

#6

Message 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 ^^)
Lisez la documentation d'AutoIt en français (et participez svp :mrgreen:) !

Mes UDF :
[/i][/b]
tolf
Niveau 7
Niveau 7
Messages : 318
Enregistré le : ven. 15 févr. 2008 12:25
Localisation : Paris
Status : Hors ligne

Re: [..] Modifier une image bmp

#7

Message par tolf »

Sinon, n'y-a-t-il pas moyen de lire les pixels directement dans le fichier avec des FileRead pour les modifier ?
Lisez la documentation d'AutoIt en français (et participez svp :mrgreen:) !

Mes UDF :
[/i][/b]
tolf
Niveau 7
Niveau 7
Messages : 318
Enregistré le : ven. 15 févr. 2008 12:25
Localisation : Paris
Status : Hors ligne

Re: [..] Modifier une image bmp

#8

Message 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.
Lisez la documentation d'AutoIt en français (et participez svp :mrgreen:) !

Mes UDF :
[/i][/b]
Répondre