Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1429 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  traitement Image

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

traitement Image

n°2035115
lio-12
Posté le 09-11-2010 à 23:17:11  profilanswer
 

Bonsoir,
 
je viens vous poser une petite question.
Je veux faire un traitement d'image. Je passe mon image depuis une picture1, dans une matrice, puis, après modification (passage en niveau de gris) , je veux vérifier le travail en réimportant la matrice dans une image.
Mais j'ai pas mal de soucis.  
Cela me renvoie l'erreur '9' dépassement de la plage, lors de l'attribution  

Code :
  1. Matrice2(i, j).Blue = Gris(Matrice(i, j))


 
 
Voyez une solution à ce problème?  
Je sent bien qu'il y a une problème au niveau de ma matrice 2... faut t'il faire un redim? pour la mettre à la même taille que la matrice 1.
Ensuite, est ce que mettre la fonction "Gris" comme byte est acceptable?
 
Je bosse sous VB6
Merci d'avance
 
Voici mon code  
 
 
 

Code :
  1. Option Explicit
  2. Option Base 1
  3. Private Type BITMAP
  4.     bmType As Long
  5.     bmWidth As Long
  6.     bmHeight As Long
  7.     bmWidthBytes As Long
  8.     bmPlanes As Integer
  9.     bmBitsPixel As Integer
  10.     bmBits As Long
  11. End Type
  12. Private Type Pixel
  13.     Red As Byte
  14.     Green As Byte
  15.     Blue As Byte
  16. End Type
  17. Private Declare Function GetObject Lib "gdi32" Alias "GetObjectA" (ByVal hObject As Long, ByVal nCount As Long, lpObject As Any) As Long
  18. Private Declare Function GetBitmapBits Lib "gdi32" (ByVal hBitmap As Long, ByVal dwCount As Long, lpBits As Any) As Long
  19. Private Declare Function SetBitmapBits Lib "gdi32" (ByVal hBitmap As Long, ByVal dwCount As Long, lpBits As Any) As Long
  20. Dim Matrice() As Pixel
  21. Dim Matrice2() As Pixel
  22. Dim Rvb As Long
  23. Dim NHeight, MWidth As Integer
  24. 'renvoi le niveau de gris du Rvb
  25. Private Function Gris(bloc As Pixel) As Long
  26.   Dim Moyenne As Long
  27.   Moyenne = (bloc.Red + (bloc.Green / 256) + (bloc.Blue / 65536)) / 3
  28.   Gris = RGB(Moyenne, Moyenne, Moyenne)
  29. End Function
  30. '***************************************************************************
  31. 'Procedure qui copie une image PictureBox vers une matrice de pixels
  32. Private Sub MatrixFromImage(Picture As PictureBox, Matrice() As Pixel)
  33.    
  34.     Dim PicBits() As Byte, PicInfo As BITMAP
  35.     Dim Size As Long
  36.     Dim i, j As Integer
  37.     Dim Z As Long
  38.    
  39.     GetObject Picture.Image, Len(PicInfo), PicInfo
  40.    
  41.     Size = PicInfo.bmWidth * PicInfo.bmBitsPixel * PicInfo.bmHeight / 8
  42.    
  43.     ReDim PicBits(Size) As Byte
  44.     ReDim Matrice(PicInfo.bmHeight, PicInfo.bmWidth) As Pixel
  45.    
  46.    
  47.     GetBitmapBits Picture.Image, Size, PicBits(1)
  48.    
  49.     For i = 1 To PicInfo.bmHeight
  50.         For j = 1 To PicInfo.bmWidth
  51.             Z = (i - 1) * PicInfo.bmWidth * 4 + (j - 1) * 4 + 1
  52.             Matrice(i, j).Blue = PicBits(Z)
  53.             Matrice(i, j).Green = PicBits(Z + 1)
  54.             Matrice(i, j).Red = PicBits(Z + 2)
  55.         Next j
  56.     Next i
  57.    
  58.     NHeight = PicInfo.bmHeight
  59.     MWidth = PicInfo.bmWidth
  60.    
  61. End Sub
  62. Private Sub ImageFromMatrix(Picture As PictureBox, Matrice() As Pixel)
  63.     Dim PicBits() As Byte
  64.     Dim i, j As Integer
  65.     Dim Z As Long
  66.    
  67.     ReDim PicBits(UBound(Matrice(), 1) * UBound(Matrice(), 2) * 4)
  68.    
  69.    
  70.    
  71.     For i = 1 To UBound(Matrice(), 1)
  72.         For j = 1 To UBound(Matrice(), 2)
  73.             Z = Z + 1
  74.            
  75.             PicBits(Z) = Matrice(i, j).Blue
  76.             PicBits(Z + 1) = Matrice(i, j).Green
  77.             PicBits(Z + 2) = Matrice(i, j).Red
  78.             PicBits(Z + 3) = 0
  79.            
  80.             Z = Z + 3
  81.         Next j
  82.     Next i
  83.    
  84.     SetBitmapBits Picture.Image, UBound(PicBits), PicBits(1)
  85.     Picture.Refresh
  86. End Sub
  87. Private Sub Command1_Click()
  88. Dim chemin As String
  89. chemin = App.Path
  90. If Right(chemin, 1) <> "\" Then
  91. chemin = chemin & "\" & "Images-test\"
  92. End If
  93. chemin = chemin & "test-niveau-de-gris.jpg"
  94. Picture1.Picture = LoadPicture(chemin)
  95. End Sub
  96. Private Sub Command2_Click()
  97.     Dim i, j As Integer
  98.     Call MatrixFromImage(Picture1, Matrice())
  99.     Picture2.Width = Picture1.Width
  100.     Picture2.Height = Picture1.Height
  101.    
  102.     For i = 1 To NHeight
  103.       For j = 1 To MWidth
  104.         Matrice2(i, j).Blue = Gris(Matrice(i, j))
  105.         Matrice2(i, j).Green = Gris(Matrice(i, j))
  106.         Matrice2(i, j).Red = Gris(Matrice(i, j))
  107.        Next j
  108.      Next i
  109.    
  110.      Call ImageFromMatrix(Picture2, Matrice2())
  111.    
  112.  
  113.      
  114. End Sub

Message cité 1 fois
Message édité par lio-12 le 09-11-2010 à 23:19:30
mood
Publicité
Posté le 09-11-2010 à 23:17:11  profilanswer
 

n°2035329
lio-12
Posté le 10-11-2010 à 17:15:45  profilanswer
 

personne :( ?

n°2035361
breizhbugs
Posté le 10-11-2010 à 19:06:28  profilanswer
 

lio-12 a écrit :


Code :
  1. 'renvoi le niveau de gris du Rvb
  2. Private Function Gris(bloc As Pixel) As Long
  3.   Dim Moyenne As Long
  4.   Moyenne = (bloc.Red + (bloc.Green / 256) + (bloc.Blue / 65536)) / 3
  5.   Gris = RGB(Moyenne, Moyenne, Moyenne)
  6. End Function



Sans vraiment m'y connaitre en vb je dirais que ta fonction Gris() renvoie un pixel entier et non juste une composant blue.
Tu devrais renvoyer 'moyenne' au lieu de 'RVB(Moyenne, Moyenne,Moyenne) ?


---------------
Seul Google le sait...
n°2035386
lio-12
Posté le 11-11-2010 à 00:18:42  profilanswer
 

oui excuse moi c'est une erreur je l'avais pas modifié sur le post ;)

n°2035509
lio-12
Posté le 11-11-2010 à 22:34:36  profilanswer
 

Toujours pas?


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  traitement Image

 

Sujets relatifs
[VBA] Dimension d'une imageAide pour passage fichier dans hash MD5
[Apprentissage] Passage de Java à C#Problème background image
Passage Callback C++ / CLRComment rendre visible une image cachée au survol d'un lien ?
Trouver une forme dans une image (réseau de neurones)Interdire hotlinking d'image & URL Directe
passer dune image a une autrepassage office 2003 2007
Plus de sujets relatifs à : traitement Image


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR