[R] Structure et autre

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
killshout
Niveau 2
Niveau 2
Messages : 21
Enregistré le : ven. 04 sept. 2009 18:54
Status : Hors ligne

[R] Structure et autre

#1

Message par killshout »

Bonjour,

J'essaye de faire un petit projet de détection de couleur.
J'ai plusieurs questions :
1) Y-a-t-il un moyen de faire des structures comme en C ?
Du style :

Code : Tout sélectionner

typedef struct
{
    int x;
    int y;
}Point;
Ça me simplifierais grandement la vie si je pouvais faire un tableau de coordonnées.

2) J'ai essayé la fonction PixelSearch et je n'ai pas trouvé de solution pour pouvoir détecter plusieurs rectangle de la même couleur à part diviser l'ecran en plusieurs morceaux et d'appliquer la fonction sur tout ces morceaux. Sauf que cette solution me permet pas de détecter certain carré de même couleur trop proche.

3)Je ne comprend pas pourquoi certaines fois quand j'utilise des tableaux je suis obligé de le crée comme suit :

Code : Tout sélectionner

Local $tableau[10]
Et des fois cette méthode suffit :

Code : Tout sélectionner

Local $tableau
Exemple :
Là je suis obligé de le déclaré avec une taille sinon j'ai une erreur :

Code : Tout sélectionner

Local $pointHautGauche[2], $pointHautDroit[2], $pointBasGauche[2], $pointBasDroit[2]
$pointHautGauche[0] = 311
$pointHautGauche[1] = 163
Et là non :

Code : Tout sélectionner

Local $posPerso
$posPerso = PixelSearch($size[0] + $pointHautGauche[0],$size[1] + $pointHautGauche[1],$size[0] + $pointBasDroit[0],$size[1] + $pointBasDroit[1],$perso)
Auriez-vous les réponse à mes interrogations ?

Merci.
Modifié en dernier par killshout le dim. 09 mai 2010 16:19, modifié 1 fois.
GMib
Niveau 4
Niveau 4
Messages : 57
Enregistré le : sam. 23 janv. 2010 12:39
Status : Hors ligne

Re: [..] Structure et autre

#2

Message par GMib »

Bonjour,

1: je ne suis pas un expert mais regarde du coté de DllStructCreate

2: aucune id

3: dans le second cas c'est la fonction qui crée le tableau et qui retourne un tableau.
Local $posPerso ne declare pas un tableau mais une simple variable.
essaye aussi les tableaux a deux dimensions pour stocké les coordonées :

Code : Tout sélectionner

Local $rect[4][2]
$rect[0][0] = 311 ; x haut gauche
$rect[0][1] = 163 ; y haut gauche
$rect[1][0] = 150 ; x haut droit
etc...
SagePourpre
Niveau 7
Niveau 7
Messages : 442
Enregistré le : dim. 06 juil. 2008 09:11
Status : Hors ligne

Re: [..] Structure et autre

#3

Message par SagePourpre »

1 : Pour ton histoire de tableau de coordonnées, je me suis dit qu'un de ces
courts exemples ferait sûrement le travail voulu.

Code : Tout sélectionner

#include <Array.au3>
Global $point[2] = [0, 0]
Global $pt[1][1] = [[0]]
;_ArrayDisplay($point)

;exemple 1
Dim $point[2] = [100, 300]
;_ArrayDisplay($point)

;exemple 2
$point = point(400,200)
;_ArrayDisplay($point)

;exemple 3
_point(@DesktopWidth,10)
;_ArrayDisplay($point)

;exemple 4
__point($point,10,10)
;_ArrayDisplay($point)

;exemple 5
Addpoint(0,0)
Addpoint(10,100)
Addpoint(@DesktopWidth,@DesktopHeight)
;_ArrayDisplay($pt)



; Fonctions

; ex 2
Func point($x, $y)
    Dim $arr[2] = [$x, $y]
    Return $arr
EndFunc   ;==>point
; ex 3
Func _point($x,$y)
    Dim $point[2] = [$x,$y]
EndFunc
; ex 4
Func __point(ByRef $arr,$x,$y)
    Dim $arr[2] = [$x,$y]
EndFunc

; ex 5
Func Addpoint($x,$y)
$pt[0][0]+=1
$i = $pt[0][0]
ReDim $pt[$i+1][2]
$pt[$i][0] = $x
$pt[$i][1] = $y
EndFunc
 
Tu pourrais bien sur utiliser DllStructCreate, DllStructSetData, DllStructGetData mais si tu
n'utilises pas DllCall et que tu utilises les structures seulement pour stocker des données, à mon
avis, c'est se compliquer la vie pour rien...


3 : Comme GMIB l'a mentionné avant moi

Code : Tout sélectionner

$pos = fonction()
Si fonction renvoie un tableau, $pos s'adaptera à ce que la fonction renvoie. Si la fonction
renvoie un tableau, $pos deviendra un tableau aux dimensions définies par la fonction.

Tu peux toujours déclarer

Code : Tout sélectionner

Local $variable
et plus tard, au besoin, utiliser :

Code : Tout sélectionner

 
Dim $variable[4][3] = _
[ _
[1,2,3], _
[1,2,3], _
[4,5,6] _
]
ou encore Redim ( préserve les anciennes valeurs présentes dans le tableau tout en le redimensionnant. )


2 : Pour la question à propos de PixelSearch, je n'ai jamais vraiment expérimentée avec
cette fonction ( je ne lui ai trouvé aucunes utilité dans mes projets jusqu'à présent )

J'aurais tendance à faire un truc du genre (ébauche seulement) :

Code : Tout sélectionner

While 1

    $pixel = PixelSearch($XStart,$YStart,$XRight,$YBottom,0XFFFFFF,0,1)
    If @error = 1 Then ExitLoop
    
    ; Ajouts des coordonnées dans un tableau ... etc... 
WEnd
 
C'est seulement l'idée générale de la façon qu'à première vue, je ferais ma recherche...
Le Sage Pourpre, pour qui la vie est tellement
plus belle vue du haut de son Pouf = )
killshout
Niveau 2
Niveau 2
Messages : 21
Enregistré le : ven. 04 sept. 2009 18:54
Status : Hors ligne

Re: [..] Structure et autre

#4

Message par killshout »

Merci bien pour vos réponse :)

Effectivement j'ai pigé le truc des tableaux.

J'ai pas encore cherché du coté de DdlStructCreate pour crée mes structures mais je vais allé voir. Mais j'aurais très bien pu faire un tableau du type $tableau[x][2] si j'avais réfléchie un peu ...

Sinon pour la recherche de pixel j'ai décidé de chercher point par point.

Merci à vous !
Répondre