Ce programme génère un code AutoIt 3 qui permet de transformer une image en fonction graphique.
Le programme lit pixel par pixel l'écran ou la fenêtre (la zone client, pas la fenêtre entière), puis génère le code AutoIt qui permettra d'obtenir la même "image". Cela peut être pratique pour ceux qui aimeraient une image en fond d'un graphique. Le code généré est bien entendu plus long que nécessaire puisqu'il écrit pixel par pixel, mais au moins, c'est automatique.
C'est une version beta puisque je compte encore rajouter certaine fonctionnalité.
A ce propos, si quelqu'un sait comment lire une IMAGE pixel par pixel, je serais ravi de l'apprendre.
Et n'hésitez pas donner votre avis où les différents bugs trouvés.
► Afficher le texteVoir le code source
Code : Tout sélectionner
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Version=beta
#AutoIt3Wrapper_Outfile=Générateur de fonction graphiques_x86.exe
#AutoIt3Wrapper_UseX64=n
#AutoIt3Wrapper_Res_Comment=Par Eli GRIV. Version beta
#AutoIt3Wrapper_Res_Description=Permet de générer des fonction graphiques AutoIt 3 à partir de l'image à l'écran ou d'une fenêtre.
#AutoIt3Wrapper_Res_Fileversion=0.0.0.0
#AutoIt3Wrapper_Res_SaveSource=y
#AutoIt3Wrapper_Res_Language=1036
#AutoIt3Wrapper_Run_Tidy=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#cs
Créateur de fonction graphiques à partir d'une fenêtre, de l'écran ou d'une image, pixel par pixel.
Par Eli GRIV le 04/09/2011 à 18:29
#ce
AutoItSetOption("WinTitleMatchMode", 3)
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <StaticConstants.au3>
Global $fenetre = GUICreate("Créateur de fonctions graphiques", 450, 200, -1, -1)
GUISetBkColor(0xFFFDBF)
Global $radio_ecran = GUICtrlCreateRadio("Ecran entier", 20, 20)
Global $radio_fenetre = GUICtrlCreateRadio("Fenêtre", 20, 60)
Global $radio_image = GUICtrlCreateRadio("Image", 20, 100)
Global $label_nom_fenetre = GUICtrlCreateLabel("Nom de la fenêtre :", 100, 65)
GUICtrlSetState(-1, $GUI_DISABLE)
Global $input_nom_fenetre = GUICtrlCreateInput("", 200, 65, 150)
GUICtrlSetState(-1, $GUI_DISABLE)
Global $label_chemin_image = GUICtrlCreateLabel("Chemin de l'image :", 100, 105)
GUICtrlSetState(-1, $GUI_DISABLE)
Global $input_chemin_image = GUICtrlCreateInput("", 200, 105, 150)
GUICtrlSetState(-1, $GUI_DISABLE)
Global $bouton_parcourir = GUICtrlCreateButton("...", 360, 103, 30)
GUICtrlSetState(-1, $GUI_DISABLE)
Global $bouton_start = GUICtrlCreateButton("Start", 175, 150, 100, 30)
GUICtrlSetFont(-1, 12)
Global $label_progress = GUICtrlCreateLabel("0 %", 400, 10, 40, -1, $SS_CENTER)
GUICtrlSetFont(-1, 6)
Global $progress_bar = GUICtrlCreateProgress(410, 25, 20, 160, BitOR($PBS_SMOOTH, $PBS_VERTICAL))
GUISetState(@SW_SHOW)
While 1
$msg = GUIGetMsg()
Switch $msg
Case $radio_ecran
GUICtrlSetState($label_nom_fenetre, $GUI_DISABLE)
GUICtrlSetState($input_nom_fenetre, $GUI_DISABLE)
GUICtrlSetState($label_chemin_image, $GUI_DISABLE)
GUICtrlSetState($input_chemin_image, $GUI_DISABLE)
GUICtrlSetState($bouton_parcourir, $GUI_DISABLE)
Case $radio_fenetre
GUICtrlSetState($label_nom_fenetre, $GUI_ENABLE)
GUICtrlSetState($input_nom_fenetre, $GUI_ENABLE)
GUICtrlSetState($label_chemin_image, $GUI_DISABLE)
GUICtrlSetState($input_chemin_image, $GUI_DISABLE)
GUICtrlSetState($bouton_parcourir, $GUI_DISABLE)
Case $radio_image
GUICtrlSetState($label_nom_fenetre, $GUI_DISABLE)
GUICtrlSetState($input_nom_fenetre, $GUI_DISABLE)
GUICtrlSetState($label_chemin_image, $GUI_ENABLE)
GUICtrlSetState($input_chemin_image, $GUI_ENABLE)
GUICtrlSetState($bouton_parcourir, $GUI_ENABLE)
Case $bouton_parcourir
$chemin_image = FileOpenDialog("Chercher une image...", @MyDocumentsDir, "Tous les fichiers (*.*)", 3, "", $fenetre)
GUICtrlSetData($input_chemin_image, $chemin_image)
Case $bouton_start
$etat_radio_ecran = GUICtrlRead($radio_ecran)
$etat_radio_fenetre = GUICtrlRead($radio_fenetre)
$etat_radio_image = GUICtrlRead($radio_image)
If $etat_radio_ecran == $GUI_CHECKED Then
AutoItSetOption("PixelCoordMode", 1)
$chemin_fichier_a_sauver = FileSaveDialog("Enregistrement du fichier...", @MyDocumentsDir, "Fichiers AutoIt 3 (*.au3)", 18, "", $fenetre)
If Not @error Then
If StringInStr($chemin_fichier_a_sauver, ".au3") == "0" Then
$chemin_fichier_a_sauver &= ".au3"
EndIf
$handle_fichier = FileOpen($chemin_fichier_a_sauver, 2)
$retour = _Enregistrement(0, $handle_fichier, "", @DesktopWidth, @DesktopHeight) ;0 = écran
If $retour == "0" Then
FileClose($handle_fichier)
FileDelete($chemin_fichier_a_sauver)
EndIf
GUICtrlSetData($bouton_start, "Start")
GUICtrlSetData($label_progress, "0 %")
GUICtrlSetData($progress_bar, 0)
EndIf
ElseIf $etat_radio_fenetre == $GUI_CHECKED Then
$nom_fenetre = GUICtrlRead($input_nom_fenetre)
If $nom_fenetre <> "" Then
AutoItSetOption("PixelCoordMode", 2)
$handle_fenetre = WinGetHandle($nom_fenetre)
If $handle_fenetre <> "" Then
$chemin_fichier_a_sauver = FileSaveDialog("Enregistrement du fichier...", @MyDocumentsDir, "Fichiers AutoIt 3 (*.au3)", 18, "", $fenetre)
If Not @error Then
If StringInStr($chemin_fichier_a_sauver, ".au3") == "0" Then
$chemin_fichier_a_sauver &= ".au3"
EndIf
$handle_fichier = FileOpen($chemin_fichier_a_sauver, 2)
$coord_max = WinGetClientSize($handle_fenetre)
$retour = _Enregistrement(1, $handle_fichier, $handle_fenetre, $coord_max[0], $coord_max[1]) ;1 = fenetre
If $retour == "0" Then
FileClose($handle_fichier)
FileDelete($chemin_fichier_a_sauver)
EndIf
GUICtrlSetData($bouton_start, "Start")
GUICtrlSetData($label_progress, "0 %")
GUICtrlSetData($progress_bar, 0)
EndIf
Else
MsgBox(48, "Erreur", "La fenêtre n'a pas été trouvée.", 0, $fenetre)
EndIf
Else
MsgBox(48, "Erreur", "Vous devez spécifier le nom de la fenêtre !", 0, $fenetre)
EndIf
ElseIf $etat_radio_image = $GUI_CHECKED Then
MsgBox(48, "Erreur", "La fonction n'est pas encore disponible.", 0, $fenetre)
;~ _Enregistrement(2) ;2 = image
Else
MsgBox(48, "Erreur", "Vous devez choisir quel objet vous voulez copier !", 0, $fenetre)
EndIf
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func _Enregistrement($type, $handle_fichier, $handle_fenetre, $x_max, $y_max)
If $type <> "2" Then
$pourcentage_en_cours = 0
GUICtrlSetData($bouton_start, "Annuler")
FileWrite($handle_fichier, "$graphique = GUICtrlCreateGraphic(0, 0, " & $x_max & ", " & $y_max & ")" & @CRLF)
$surface_totale = $x_max * $y_max
$x = 0
$y = 0
While 1
$msg = GUIGetMsg()
If $type == "0" Then
$couleur = PixelGetColor($x, $y)
ElseIf $type == "1" Then
$couleur = PixelGetColor($x, $y, $handle_fenetre)
EndIf
FileWrite($handle_fichier, "GUICtrlSetGraphic($graphique, $GUI_GR_COLOR, " & $couleur & ")" & @CRLF)
FileWrite($handle_fichier, "GUICtrlSetGraphic($graphique, $GUI_GR_PIXEL, " & $x & ", " & $y & ")" & @CRLF)
$x += 1
If $x > $x_max Then
$y += 1
$x = 0
EndIf
If $y > $y_max Then
FileClose($handle_fichier)
Exit
EndIf
If $msg == $bouton_start Then
$choix1 = MsgBox(52, "Attention", "Voulez-vous vraiment annuler ?", 0, $fenetre)
If $choix1 == "6" Then
$choix2 = MsgBox(52, "Attention", "Voulez-vous supprimer le fichier ?", 0, $fenetre)
If $choix2 == "6" Then
Return (0)
Else
Return (1)
EndIf
ExitLoop
EndIf
EndIf
$surface = $x * $y
$pourcentage = Ceiling($surface / $surface_totale)
If $pourcentage > $pourcentage_en_cours Then
GUICtrlSetData($progress_bar, $pourcentage)
GUICtrlSetData($label_progress, $pourcentage & " %")
$pourcentage_en_cours = $pourcentage
EndIf
WEnd
Else
FileWrite($handle_fichier, "$graphique = GUICtrlCreateGraphic(0, 0, " & $x_max & ", " & $y_max & ")" & @CRLF)
$x = 0
$y = 0
While 1
If $type == "0" Then
$couleur = PixelGetColor($x, $y)
ElseIf $type == "1" Then
$couleur = PixelGetColor($x, $y, $handle_fenetre)
EndIf
FileWrite($handle_fichier, "GUICtrlSetGraphic($graphique, $GUI_GR_COLOR, " & $couleur & ")" & @CRLF)
FileWrite($handle_fichier, "GUICtrlSetGraphic($graphique, $GUI_GR_PIXEL, " & $x & ", " & $y & ")" & @CRLF)
$x += 1
If $x > $x_max Then
$y += 1
$x = 0
EndIf
If $y > $y_max Then
FileClose($handle_fichier)
Exit
EndIf
WEnd
EndIf
EndFunc ;==>_Enregistrement