Initialisation tableau

IceCubeMan Messages postés 4 Date d'inscription mercredi 23 décembre 2009 Statut Membre Dernière intervention 2 janvier 2010 - 23 déc. 2009 à 14:44
IceCubeMan Messages postés 4 Date d'inscription mercredi 23 décembre 2009 Statut Membre Dernière intervention 2 janvier 2010 - 2 janv. 2010 à 22:55
Bonjour,

Voici le bout de code qui me pose problème :

Je suis en VB 2005
Dim nvlleimage(nvllelargeur, nvllehauteur) As Color
nvlleimage = fuzeau.agrandissementbilineaire(nvllelargeur, nvllehauteur, image)


fuzeau.agrandissementbilineaire résulte d'une dll, et me sort un System.Drawing.Color(,), ici en l'occurence, il redimensionne la variable "image" avec une nouvelle largeur : "nvllelargeur" et une nouvelle hauteur : "nvllehauteur".
Le problème c'est lorsque j'exécute mon programme, à la deuxième ligne, j'obtient un :
"La référence d'objet n'est pas définie à une instance d'un objet".
Bref, j'ai pas initialisé ma variable "nouvelleimage", enfin, je crois.

Mais je sais pas comment faire, parce que quand je met un new quelque part, il me dit que ça marche pas pour les tableaux! Quel est l'astuce? Car la, je suis vraiment bloqué.

Merci d'avance pour vos réponses.

7 réponses

Profil bloqué
23 déc. 2009 à 22:17
Salut
Tout d'abord les paramètres nvellelargeur et nvellehauteur ne peuvent pas servir à dimensionner le tableau nvelleimage ( à moins que j'ai mal compris le problème)
ensuite à la deuxième ligne nvelleimage n'est pas dimensionné alors qu'il l'est dans la déclaration avec 2 dimensions

L'idéal serait de passer par une structure

Private Structure Image ' la structure image
Dim nvellelargeur as integer
Dim nvellehauteur as integer
Dim couleur as color
End Structure

Private nvelleimage() as Image ' déclaration du tableau

ensuite tu dimensionnes ton tableau
Redim nvelleimage(0 to 99) ' pour 100 éléments par exemple

Ensuite pour accéder à un élément de ta structure
tu fais par exemple nvelleimage(5).nvellehauteur pour avoir la nouvelle hauteur de l'élément 5 de ton tableau

Sans plus de précision je ne puis affirmer que ce que je te dis est juste


La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

GRENIER Alain
0
IceCubeMan Messages postés 4 Date d'inscription mercredi 23 décembre 2009 Statut Membre Dernière intervention 2 janvier 2010
1 janv. 2010 à 17:11
Je crois que je me suis mal exprimé! Je vais essayé de faire mieux mais vous savez comme il est difficile de se mettre à la place des autres quand on est à fond dans son projet! ^^
En fait, je veux utiliser la fonction fuzeau.agrandissementbilineaire
Cette fonction prend en entrée une image (tableau 2 dimensions type Color) et la redimensionne sur une largeur de pixel nvllelargeur, et une hauteur nvllehauteur, soit un tableau deux dimensions de type Color : image(nvllelargeur-1,nvllehauteur-1).
Et à chaque case du tableau est enregistrée la couleur du pixel en question. Voila voila
Cependant, je n'arrive pas à déclarer ou initialiser (je ne connais pas la différence, eh oui, je débute ^^) de façon propre afin de stocké en mémoire la nouvelle image redimensionnée. Comment faire ça bien sans erreur? Car je le fais par un New dans les list, mais pour les tableaux, il veut pas ;-)


Est ce que je me suis exprimé plus clairement?

Merci pour vos réponses et meilleurs voeux pour cette année 2010.

Corentin
0
Profil bloqué
2 janv. 2010 à 16:04
Salut Corentin et meilleurs voeux
On commence à mieux comprendre

Dim nvlleimage(nvllelargeur, nvllehauteur) As Color --> Tableau de couleurs à 2 dimensions
nvlleimage = fuzeau.agrandissementbilineaire(nvllelargeur, nvllehauteur, image) --> Ta fonction en dll

Pourquoi nvelleimage en début de 2° ligne n'a pas ses 2 dimensions
Tu écris :Le problème c'est lorsque j'exécute mon programme, à la deuxième ligne, j'obtient un :
"La référence d'objet n'est pas définie à une instance d'un objet".

nelleimage n'est pas connue en tant que variable : c'est nvlleimage(nvllelargeur, nvllehauteur) qui est connue

Moi j'écrirai : nvlleimage(nvllelargeur, nvllehauteur) = fuzeau.agrandissementbilineaire(nvllelargeur, nvllehauteur, image)

Ou alors je suis complètement à côté de la plaque

La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

GRENIER Alain
0
Profil bloqué
2 janv. 2010 à 16:06
nvelleimage n'est pas connue en tant que variable : c'est nvlleimage(nvllelargeur, nvllehauteur) qui est connue

Il manquait un v (c'est nvelleimage et non nelleimage)

La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

GRENIER Alain
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
IceCubeMan Messages postés 4 Date d'inscription mercredi 23 décembre 2009 Statut Membre Dernière intervention 2 janvier 2010
2 janv. 2010 à 17:03
Maintenant que j'ai rectifié mon code par ça :

Dim nvlleimage(nvllelargeur - 1, nvllehauteur - 1) As Color
        nvlleimage(nvllelargeur - 1, nvllehauteur - 1) =  fuzeau.agrandissementbilineaire(nvllelargeur, nvllehauteur, image)


J'ai l'erreur suivante :
Une valeur de type 'Tableau à 2 dimension(s) de System.Drawing.Color' ne peut pas être convertie en 'System.Drawing.Color'


en fait, je pense qu'en lui disant nvlleimage(x,y) par exemple, il prend en compte la case
à l'abscisse x et d'ordonné y et essaye de la remplacer par le fuzeau.agrandissementbilineaire(nvllelargeur, nvllehauteur, image). Ce qui ne marche pas.

Alors j'ai essayé de faire une boucle
For i =0 to nvllelargeur-1
For j=0 To nvllehauteur-1
nvlleimage(i,j)=Color.FromArgb(fuzeau.agrandissementbilineaire(nvllelargeur, nvllehauteur, image)(i,j).R,fuzeau.agrandissementbilineaire(nvllelargeur, nvllehauteur, image)(i,j).G,fuzeau.agrandissementbilineaire(nvllelargeur, nvllehauteur, image)(i,j).B)
Next
Next



Mais la, quand j'éxécute, j'obtient la même erreur qu'avant :
"La référence d'objet n'est pas définie à une instance d'un objet"

Voila voila!

Une autre idée? Merci beaucoup pour vos réponses!

Corentin
0
Profil bloqué
2 janv. 2010 à 17:33
Ta DLL te sort une couleur ou un tableau de couleurs
Donne moi la déclaration de ta DLL


La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

GRENIER Alain
0
IceCubeMan Messages postés 4 Date d'inscription mercredi 23 décembre 2009 Statut Membre Dernière intervention 2 janvier 2010
2 janv. 2010 à 22:55
Ca répondra mieux à ta question:



Bonne soirée à tous

Corentin
0
Rejoignez-nous