J'ai un problème avec une tableau à 3 dimensions que je déclare avec Global Dim TabCoord.i(1,1,1), le soucis vient du fait que je ne sais pas à l'avance combien d'éléments il y aura dans mon tableau à la fin du traitement et je ne sais pas ce que je dois mettre comme paramètres dans mon ReDim, sachant que la première dimension de mon tableau, c'est la position X, la seconde position, c'est la position Y et la dernière position, c'est la couleur. Je pense que la vraie question est "peut-on redimensionner plusieurs fois le même tableau ?"
Je sollicite donc l'aide collégiale car je sais que toute le monde me répondra et je vous en remercie tous de tout coeur.
[Résolu] Problème avec tableau multi dimensions
[Résolu] Problème avec tableau multi dimensions
Dernière modification par Micoute le mer. 22/août/2012 20:57, modifié 1 fois.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
Re: Problème avec tableau multi dimensions
Tu exagère un tantinet.
Ta demande est le B.A BA de la manipulation des tableaux.
Tu trouvera la réponse dans l'aide PB
Si tu ne tente rien, tu ne sauras jamais rien.
Donne nous au moins un code, pour que l'ons puissent te dire ou tu n'as pas compris.
Ta demande est le B.A BA de la manipulation des tableaux.
Tu trouvera la réponse dans l'aide PB
Si tu ne tente rien, tu ne sauras jamais rien.
Donne nous au moins un code, pour que l'ons puissent te dire ou tu n'as pas compris.
Re: Problème avec tableau multi dimensions
Micoute a écrit :J'ai un problème avec une tableau à 3 dimensions que je déclare avec Global Dim TabCoord.i(1,1,1), le soucis vient du fait que je ne sais pas à l'avance combien d'éléments il y aura dans mon tableau à la fin du traitement et je ne sais pas ce que je dois mettre comme paramètres dans mon ReDim,
la doc est clair
bref , un tableau multi-dimension , ne peut pas etre redimensionné ...Si ReDim est utilisé sur un tableau à plusieurs dimensions, seule la dernière dimension peut être changée.
je dirai : ; de toute façon un tableau , en Purebasic , n'est pas vraiment fait pour les données dont on ne connais pas a l'avance le nombre
c'est pour cette raison , qu'il existe les Liste Chainée
rappel ;
une liste chainée c'est une Liste ( la bonne blague ) d'elements ...
a toi de voir ce que tu vas faire de ces elements !
gros avantage , tu n'est pas limité par la taille comme un tableau
donc , pour ton soucis , il te suffit de "ranger" dans une liste tes donnée de la façon suivante
Liste :
45 <---- valeur X du 1er point
56 <---- valeur Y du 1er point
456546 < ---- couleur du 1er point
87 <---- valeur X du 2em point
89 valeur Y du 2em point
65488 couleur du 2em point
.... etc
tu peux ainsi aisément ressortir les coordonnées et la couleur d'un point
avec une simple boucle et un Step 3 par exemple ...
c'est une piste .. il y a d'autre méthode (l'utilisation d'une structure par exemple .... voir les TUTO sur le Forum )
avec là l'utilisation d'un tableau , ou d'une liste ....
[Resolu] Problème avec tableau multi dimensions
Merci Dobro ! C'est toi qui as le mieux compris ce que je veux faire, j'ai compris qu'on ne peut indéfiniment redimensionner un tableau, j'ai donc fait une boucle test pour incrément un compteur qui m'a servi pour redimensionner mon tableau.
Déjà un grand merci de m'avoir répondu.
Déjà un grand merci de m'avoir répondu.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
Re: Problème avec tableau multi dimensions
pour te montrer concretement comment se servir d'un tableau Structuré avec une image
voici un exemple commenté , qui de montre de façon scolaire, comment lire le contenu d'une image
pour le mettre dans une structure
puis un traitement (echange de la composante Rouge et Bleu de chaque point ) est effectué ...
on redessine la nouvelle image, et on l'affiche dans un Ecran en Fenetre .....
ça fait , je pense une bonne base
voici un exemple commenté , qui de montre de façon scolaire, comment lire le contenu d'une image
pour le mettre dans une structure
puis un traitement (echange de la composante Rouge et Bleu de chaque point ) est effectué ...
on redessine la nouvelle image, et on l'affiche dans un Ecran en Fenetre .....
ça fait , je pense une bonne base

Code : Tout sélectionner
UseJPEGImageDecoder()
; *** taille fenetre ****
#Width = 600
#Height = 600
; **********************
Structure point_image
x.l ; la coordonée X
y.l ; la corrdonée y
couleur.l ; la couleur du pixel
EndStructure
dim point_image.point_image(1) ; on donne une taille de 1 par defaut ... voir plus loin le redimenssionnement
; les enumerations histoire que ce soit plus parlant que des chiffres ....
Enumeration
#window
#Panel
#Cont
#image
EndEnumeration
;- Initialisation de DirectX
If InitSprite()=0 or InitKeyboard() = 0 Or InitMouse() = 0
MessageRequester("Erreur", "Impossible d'initialiser DirectX", 0)
CloseWindow(#window) : End
EndIf
;- Ouverture de la fenêtre et de l'écran
hwnd = OpenWindow(#window, 0, 0, #Width, #Height, "",#PB_Window_TitleBar | #PB_Window_ScreenCentered|#PB_Window_SystemMenu )
ScrollAreaGadget(#Panel,10, 10,500,500, 1024, 768, 30)
hCont = ContainerGadget(#Cont,10,10,1024,768,#PB_Container_Double)
OpenWindowedScreen(hCont, 0, 0, 1024, 768, 0, 0, 0)
file$=OpenFileRequester("choisir une image a charger","c:\","*.jpg",1) ; on demande une image
if file$
if LoadImage(#image,file$)
Else
MessageRequester("erreur","l'image ne peut etre chargé")
End
endif
endif
;normalement ici on a une image valide
; nous allons recuperer sa taille x,y
ResizeImage(#image,1024,768)
Largeur = ImageWidth(#Image)
Hauteur = ImageHeight(#Image)
SetGadgetAttribute(#Panel, #PB_ScrollArea_InnerWidth , Largeur) ; je redimensionne au passage les Scrolls Gadget
SetGadgetAttribute(#Panel, #PB_ScrollArea_InnerHeight , Hauteur) ; je redimensionne au passage les Scrolls Gadget
; la taille de l'image va nous permetre de redimensionner notre Tableau (structure)
redim point_image(Largeur*Hauteur ) ; voilla notre structure est capable de recevoir tout les points de notre image
;maintenant que nous avons sa taille , avec 2 boucles on va lire les points de notre image, et les mettre dans la structure ...
StartDrawing(ImageOutput(#image)) ; donc on va travailler dans notre image , on va lire les points
for y=0 to Hauteur-1
for x=0 to Largeur-1
compteur=compteur+1
point_image(compteur )\x=x ; on met la coordoné X du point en cours ; dans la structure
point_image(compteur )\y=y ; on met la coordoné X du point en cours ; dans la structure
point_image(compteur )\couleur=point(x,y) ; on met la couleur du point dans notre structure
next x
next y
StopDrawing()
; ici normalement toute l'image est dans notre structure !
; maintenant , on peut s'amuser a relire les points, et a changer la couleur ... par exemple :
taille_du_tableau =compteur ;ArraySize( point_image() ,1)
for y=0 to Hauteur-1
for x=0 to Largeur-1 ; pour tout les points du tableau ..... ; maintenant que l'image est dans le tableau , l'operation va etre tres rapide ;o)
i=i+1
; ici , on va ne changer que la couleur
; on va decomposer notre couleur en RVB
Rouge= red(point_image(i )\couleur)
vert= green(point_image(i )\couleur)
bleu=blue(point_image(i )\couleur)
; maintenant , on va echanger le Rouge avec le bleu ( bonjour le traitement LOL )
buff=Rouge
Rouge=bleu
bleu=buff ; l'echange avec 3 variables est vraiment une base , il aurai mieux valut utiliser directement la variable "bleu" a la place de "rouge" et c'etait fait :D
; on va recomposer la couleur et la mettre dans la structure
point_image(i )\couleur=rgb(rouge,vert,bleu) ; c'est ici que l'echange de variable aurai ete plus simple en ecrivant "rgb(bleu,vert,rouge)" ;o)
next x
next y ; et ceci pour tout les points de l'image
; voyons le résultat ::
; on va redessiner l'image avec ses nouvelles couleurs
compteur=0
StartDrawing(ImageOutput(#image)) ; donc on va travailler dans notre image , on va ecrire les points
for y=0 to Hauteur-1
for x=0 to Largeur-1
compteur=compteur+1
plot(x,y,point_image(compteur )\couleur) ; on se sert du contenu de notre structure pour redessiner l'image
next x
next y
StopDrawing()
; allez on affiche l'oeuvre d'art histoire de rire :
;- ** début de la boucle **********************
Repeat
ExamineMouse() ; on demande a purebasic de surveiller les event de souris !
ExamineKeyboard() ; on demande a purebasic de surveiller les event de clavier!
evnt= waitWindowEvent(2)
Select evnt
Case #PB_Event_CloseWindow
End
EndSelect
StartDrawing(ScreenOutput())
DrawText(10, 10, "touche ESC pour quitter" ,RGB(255,255,0),RGB(0,0,0))
DrawImage(ImageID(#image),0,0)
StopDrawing()
FlipBuffers() : ClearScreen(RGB(0,0,0))
Until KeyboardPushed(#PB_Key_Escape)
; **************** fin de boucle ************************
; EPB
Re: Problème avec tableau multi dimensions
Oh merci beaucoup, c'est ça que je voulais faire, mais en moins bien ! Je manque de qualificatifs pour dire mon émotion.
Pourrais-tu m'expliquer comment mettre [Resolu] ?
Pourrais-tu m'expliquer comment mettre [Resolu] ?
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
Re: Problème avec tableau multi dimensions
edite ton premier message
c'est seulement dans le premier qu'on peut editer le titre du topic
c'est seulement dans le premier qu'on peut editer le titre du topic
