Créer des fichiers image PNG ou Bitmap avec Autoit

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
FDMgameplay
Niveau 1
Niveau 1
Messages : 13
Enregistré le : dim. 17 sept. 2017 17:38
Status : Hors ligne

Créer des fichiers image PNG ou Bitmap avec Autoit

#1

Message par FDMgameplay »

Salut à tous !
Je voudrais savoir s'il est possible de créer des fichiers image type png ou bitmap avec autoit.
Je n'ai rien trouvé à ce sujet et le FileWrite me semble être un peu compliqué à réaliser.

Je remercie d'avance toute personne m'aidant dans ma manœuvre :mrgreen:
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: Créer des fichiers image PNG ou Bitmap avec Autoit

#2

Message par walkson »

Bonjour,
Votre demande est un peu flou
Créer à partir du binaire, d'un chemin, par "Autoit", etc ....?
Je vous invite à regarder la rubrique GDIPlus de l'aide et plus particulièrement les bitmaps
L'exemple ci-dessous est tiré de l'aide (un peu modifié) à partir de _GDIPlus_BitmapCreateFromScan0()
#include <GDIPlus.au3>

Example()

Func Example()
   _GDIPlus_Startup()
   Local Const $iW = 460, $iH = 100
   Local $hBitmap = _GDIPlus_BitmapCreateFromScan0($iW, $iH) ;create an empty bitmap
   Local $hBmpCtxt = _GDIPlus_ImageGetGraphicsContext($hBitmap) ;get the graphics context of the bitmap
   _GDIPlus_GraphicsSetSmoothingMode($hBmpCtxt, $GDIP_SMOOTHINGMODE_HIGHQUALITY)
   _GDIPlus_GraphicsClear($hBmpCtxt, 0xFFFFFF00) ;clear bitmap with color white
   _GDIPlus_GraphicsDrawString($hBmpCtxt, "AutoIt rulez!", 0, 0, "Comic Sans MS", 52) ;draw some text to the bitmap
   Local $sFile = @TempDir & "\Test.bmp"
   _GDIPlus_ImageSaveToFile($hBitmap, $sFile) ;save bitmap to disk
   ;cleanup GDI+ resources
   _GDIPlus_GraphicsDispose($hBmpCtxt)
   _GDIPlus_BitmapDispose($hBitmap)
   _GDIPlus_Shutdown()
   ShellExecute($sFile) ;open bitmap with default app
EndFunc   ;==>Example
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
FDMgameplay
Niveau 1
Niveau 1
Messages : 13
Enregistré le : dim. 17 sept. 2017 17:38
Status : Hors ligne

Re: Créer des fichiers image PNG ou Bitmap avec Autoit

#3

Message par FDMgameplay »

Merci de m'avoir répondu :mrgreen:

Pour être plus précis sur ma demande, je souhaiterai générer une image à l'aide d'une fonction autoit :
If <une action dans mon programme> Then
   ;créer un pixel noir aux coordonnées données sur un fichier .png ou autre format d'image (de préférence png)
Else
   ;créer un pixel blanc aux coordonnées données sur un fichier .png ou autre format d'image (de préférence png)
EndIf
L'objectif final est de générer une image complète avec l'algorithme que je suis en train de mettre au point
FDMgameplay
Niveau 1
Niveau 1
Messages : 13
Enregistré le : dim. 17 sept. 2017 17:38
Status : Hors ligne

Re: Créer des fichiers image PNG ou Bitmap avec Autoit

#4

Message par FDMgameplay »

Je vais regarder GDIplus, j'ai l'impression que cela pourrait m'être utile mais je ne comprends pas encore comment parfaitement l'utiliser.

Je te tiens au courant
FDMgameplay
Niveau 1
Niveau 1
Messages : 13
Enregistré le : dim. 17 sept. 2017 17:38
Status : Hors ligne

Re: Créer des fichiers image PNG ou Bitmap avec Autoit

#5

Message par FDMgameplay »

Ok alors j'ai enfin compris tout le fonctionnement de GDIPlus et c'est formidable ! c'est exactement ce qu'il me fallait :D

Voici mon code :
Func _ImageCreator($color)

   _GDIPlus_Startup()

   $Brush = _GDIPlus_BrushCreateSolid( $color )

   Local Const $iW = 240, $iH = 80
   Local $hBitmap = _GDIPlus_BitmapCreateFromScan0($iW, $iH) ;create an empty bitmap
   Local $hBmpCtxt = _GDIPlus_ImageGetGraphicsContext($hBitmap) ;get the graphics context of the bitmap
   _GDIPlus_GraphicsClear($hBmpCtxt, 0xFFFFFFFF)
   _GDIPlus_GraphicsFillRect( $hBitmap, $zX, $zY, 4, 4, $Brush ) ; les variables $zX et $zY sont déclarées plus haut en global en fonction de l'algo

   Local $sFile = @DesktopDir & "\Test.png"
   _GDIPlus_ImageSaveToFile($hBitmap, $sFile) ;save bitmap to disk
   ;cleanup GDI+ resources
   _GDIPlus_BrushDispose($Brush)
   _GDIPlus_GraphicsDispose($hBmpCtxt)
   _GDIPlus_BitmapDispose($hBitmap)
   _GDIPlus_Shutdown()
   ShellExecute($sFile) ;open bitmap with default app
EndFunc
Mais le problème c'est que lorsque la fonction est censé dessiner un carré de 4x4 pixels noirs ( $color = 0xFF000000) sur le fond blanc de l'image (_GDIPlus_GraphicsClear($hBmpCtxt, 0xFFFFFFFF) ) il ne se passe rien.
J'ai cherché et je ne trouve pas d'erreurs pourtant.

Quelqu'un pourrait m'aider ?

EDIT : Je tiens à préciser que l'image se crée bien avec le fond blanc mais il n'y a pas le carré de 4x4 pixels noir qui s'affiche
FDMgameplay
Niveau 1
Niveau 1
Messages : 13
Enregistré le : dim. 17 sept. 2017 17:38
Status : Hors ligne

Re: Créer des fichiers image PNG ou Bitmap avec Autoit

#6

Message par FDMgameplay »

Ok j'ai trouvé mon erreur ^^

dans le _GDIPlus_GraphicsFillRect( $hBmpCtxt, $zX, $zY, 4, 4, $Brush ) j'avais mis en première variable $hBitmap à la place de $hBmpCtxt

Autant pour moi !

A présent j'ai un autre problème qui se pose : j'aimerais que au fur et à mesure de mon algorithme, ce dessin se remplisse peu à peu. Le problème avec la fonction que j'ai faite, c'est qu'à chaque fois qu'elle est appelée, elle n'édite pas l'image mais elle la remplace par une nouvelle.
Comment régler ce problème ?
FDMgameplay
Niveau 1
Niveau 1
Messages : 13
Enregistré le : dim. 17 sept. 2017 17:38
Status : Hors ligne

Re: Créer des fichiers image PNG ou Bitmap avec Autoit  

#7

Message par FDMgameplay »

Rebonjour !j'ai réglé ce problème de la manière suivante :
A chaque fois qu'une nouvelle boucle est effectuée, j'utilise la fonction _GDIPlus_GraphicsDrawImage qui permet de récupérer l'image créée lors de la boucle précédente et de l'éditer en dessinant par dessus à certains endroits.

Je marque ce sujet comme résolu :D
Répondre