Gnomed
Messages postés7Date d'inscriptionlundi 24 novembre 2008StatutMembreDernière intervention 8 janvier 2009
-
25 nov. 2008 à 16:30
Kevin.Ory
Messages postés840Date d'inscriptionmercredi 22 octobre 2003StatutMembreDernière intervention 7 janvier 2009
-
27 nov. 2008 à 17:10
Bonjour,
J'ai calculé l'intensité lumineuse en plusieurs point d'une surface. Je voudrais générer une image à partir de mes résultats:
-une matrice rectangulaire contenant la valeur de l'intensité en différents points de la surface et à intervalles réguliers.
J'aimerais que l'image soit en couleurs qui varient en fonction de l'intensité (par exemple faibles valeurs en bleu et fortes valeurs en rouge). J'obtiens à peu près ce que je veux en utilisant un graphique excel surface mais j'aimerais faire quelque chose de plus propre directement intégré à vb.
Je sais pas si c'est très clair...
A voir également:
Générer une image à partir d'une matrice de valeur
Kevin.Ory
Messages postés840Date d'inscriptionmercredi 22 octobre 2003StatutMembreDernière intervention 7 janvier 200911 25 nov. 2008 à 17:39
Salut,
Suffit de créer une bitmap de la taille de ta matrice puis de colorier chaque pixel en fonction de la valeur. Pour cela il est possible d'utiliser la méthode SetPixel de Bitmap mais c'est plutôt lent, pour plus de performance utilise la fonction LockBits de Bitmap.
Matrice = Tableau?
Private Sub txtTexts_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim matrice(499, 299) As Integer
Dim bitmap As New Bitmap(500, 300)
For i As Integer = 0 To matrice.GetLength(0) - 1
For j As Integer = 0 To matrice.GetLength(1) - 1
bitmap.SetPixel(i, j, GetMatriceColor(matrice(i, j)))
Next
Next
End Sub
Private Function GetMatriceColor(ByVal Value As Integer) As Color
Return Color.FromArgb(255, Value, 0, 255 - Value)
End Function
Si ta matrice contient des valeurs entre 0 et 255, le 255 rouge et le 0 bleu. Bien sur c'est a toi de faire la conversion valeur => couleur en fonction de tes besoins.
Pour plus de perf, voir LockBits eu lieu de SetPixel: http://msdn.microsoft.com/fr-fr/library/5ey6h79d.aspx
Gnomed
Messages postés7Date d'inscriptionlundi 24 novembre 2008StatutMembreDernière intervention 8 janvier 2009 27 nov. 2008 à 10:39
Merci ça marche très bien, j'ai un peu modifié tout ça, si ça intéresse quelqu'un:
La fonction fAffichageSol affiche l'intensité dans valeurs du Sol qui sont stockées dans le tableau ValeurLux entre les index 1 et Nx*Ny
La fonction fCouleur renvoie une valeur de couleur pour une valeur de lux en utilisant toute la plage du bleu au rouge. min et max sont les valeur maximale et minimale que peut prendre lux
Function fCouleur(ByVal min As Single, ByVal max As Single, ByVal lux As Single) As Color
lux = CInt((lux - min) * (255 / (max - min)))
If lux > 255 Or lux < 0 Then
lux = 0
End If
Return Color.FromArgb(255, lux, 0, 255 - lux)
End Function
Sub fAffichageSol(ByVal ValeurLux() As Single)
Dim Sol As New Bitmap(Nx + 1, Ny + 1)
Dim i, j, k As Integer
Dim Graphique As New FormGraphique
k = 0
For i = 1 To Nx
For j = 1 To Ny
k = k + 1
Sol.SetPixel(i, j, fCouleur(fMinTab(ValeurLux, 1, Nx * Ny), fMaxTab(ValeurLux, 1, Nx * Ny), ValeurLux(k)))
Next j
Next i
Graphique.PictureBoxSol.Image = Sol
Graphique.ShowDialog()
End Sub
Maintenant je cherche à aficher une image plus grande car je calcul des valeur d'intensité sur une grille 10x15 donc l'image est petite. Je posterai mes résultats si quelqu'un est interressé.