Page 1 sur 1

[R] Structure et autre

Posté : ven. 07 mai 2010 14:52
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.

Re: [..] Structure et autre

Posté : ven. 07 mai 2010 19:57
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...

Re: [..] Structure et autre

Posté : dim. 09 mai 2010 06:20
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...

Re: [..] Structure et autre

Posté : dim. 09 mai 2010 15:40
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 !