raffika
Messages postés269Date d'inscriptiondimanche 31 mai 2009StatutMembreDernière intervention12 mars 2011
-
3 juin 2010 à 10:04
Cpcdos
Messages postés425Date d'inscriptionsamedi 11 juillet 2009StatutMembreDernière intervention28 octobre 2016
-
3 mai 2011 à 22:28
Donc j'ai un code mais ça ne marche pas
les images sont placées sur un 'tableau'
de PictureBox mais ne coorespondent pas
exactement à ce que je veux, si par exemple
une image est plus rouge que l'autre
l'autre sera selectionnée...
Donc voici mon code :
Dim str_texte As String
str_texte = File.ReadAllText("Rapport.txt")
'Fichier ouvert''Ouvre le fichier Rapport.txt
'Qui a été crée avec un autre programme
'le fichier ressemble à ceci :
'C:\Visual Studio 2008\Projects\SampleFilter\SampleFilter\bin\Debug\Samples\00311708.jpg,131,79,52,
'C:\Visual Studio 2008\Projects\SampleFilter\SampleFilter\bin\Debug\Samples\00372manw1680x10501je.jpg,119,118,112,
'Donc il y a le chemin de l'image puis ses valeurs RGB calculées avec une moyenne
'faite avec une lecture pixels par pixels... Donc dans l'ordre : Rouge Vert Bleu séparés par
'une virgule... Donc chaque ligne correspond à une image.
For X = 1 To 18 ''Ensuite on démarre une boucle qui va faire charger
For Y = 1 To 7 ''une image par chaque picturebox, Donc 18 pictureboxs de long et 7 de large
Dim returnValue As Color = Controls("PictureBoxy" & Y & "x" & X).BackColor ''Prend la couleur de la case 1 dans reurnvalue
'returnvalue correspond à la couleur de fond de la picturebox
'qui a été généré a partir d'une image bmp en faisant la moyenne
'des couleurs contenue dans un carré de 50x50 pixels
'comme une mosaique
Dim splitt()
splitt = Split(returnValue.ToString, ",")
Dim red, green, blue
red = Mid(splitt(1), 4, Len(splitt(1)) - 3)
green = Mid(splitt(2), 4, Len(splitt(2)) - 3)
blue = Mid(splitt(3), 4, Len(splitt(3)) - 4)
''Obtient Red Green et Blue de la couleur de fond de la case
Dim roi()
roi = Split(str_texte, vbCrLf) ''Découpe la rapport par lignes
'Découpe le fichier rapport.txt ligne par ligne dans roi
Dim slpp() 'Variable qui découpera les valeur RVB avec une virgule
Dim lenghtmp As Integer = 0 'Comteras le nombre de ligne lues
Dim pointer As Integer = 0 'Contiendra l'index de la ligne intéressée
Dim imagedistance(5000) As Integer ''Contiendra la distance
''Entre deux points dans un espace en 3D (R V et B)
Dim distance As Integer
For i = 0 To roi.Length() - 2 ''On commence à lire le fichier
''et on compare les valeurs RVB des images avec les
'valeurs rvb de backcolor de la case en cours
slpp = Split(roi(i), ",")
Dim redy As Integer = slpp(1)
Dim greeny As Integer = slpp(2)
Dim bluey As Integer = slpp(3) ''Voilà donc l'image
'du fichier a pour valeurs RVB : redy greeny et bluey
Dim a(2), b(2), c(2) As Integer ''Voilà donc on va calculer
''la distance entre RVB de l'image en cours de lecture
''et la couleur de fond de la picturebox
a(1) = redy ''Coordonnées X du point A
a(2) = red ''Coordonnées X du point B
b(1) = greeny ''Coordonnées Y du point A
b(2) = green ''Coordonnées Y du point B
c(1) = bluey ''Coordonnées Z du point A
c(2) = blue ''Coordonnées Z du point A
distance = Sqrt((a(1) - a(2)) * (a(1) - a(2)) + (b(1) - b(2)) * (b(1) - b(2)) + (c(1) - c(2)) * (c(1) - c(2)))
''Distance contient donc la distance entre les deux points dans un tableau 3D
imagedistance(i) = distance ''On enregistre juste cette distance
lenghtmp = lenghtmp + 1 ''...Peut être remplacé par roi.length() !?
Next '
Dim repere = 0
For i = 0 To lenghtmp - 1 ''ici on cherche la distance la plus courte
If i 0 Then repere imagedistance(i) : pointer = i : GoTo okii
If imagedistance(i) < repere Then repere imagedistance(i) : pointer i
okii:
Next ''Distance la plus petite = repere
''pointer = pointe le fichier d'image dans roi !
Dim locate() ''Ensuite suivant le pointer, on trouve le chemin de l'image
'qui est censée être la plus proche visuellement de la couleur de fond du picturebox
locate = Split(roi(pointer), ",")
Dim pb As PictureBox = DirectCast(Controls("PictureBoxy" & Y & "x" & X), PictureBox)
''Voilà donc ici on fait un DirectCast pour trouver la picturebox
''Correspondante dans le 'tableau' de picturebox
pb.Load(locate(0)) ''Et on y charge l'image !
''Apres on recommence en passant à la Picturebox suivante...
Next : Next