Vba traitement de matrice pixels bmp, wia, argb et affichage userform
Maxtroubadour
Messages postés4Date d'inscriptionsamedi 19 mars 2011StatutMembreDernière intervention22 mars 2011
-
19 mars 2011 à 08:08
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 2014
-
15 mai 2011 à 18:58
Bonjour à tous,
C'est mon premier message sur le forum.
Je travaille actuellement sur excel vba 2003.
(outil de mon entreprise)
Je souhaite faire une comparaison de 2 matrices N&B (issues de 2 bmps de même format) et réaliser une matrice de sortie qui est la résultante d'un masque des deux images.
Je sais récupérer le stream BinaryData des 2 fichiers bmp, récupérer les données brutes dans des tableaux de 'Bytes()' et faire mon tableau de sortie. Les tableaux sont en argb.
Aujourd'hui, comment puis-je faire pour :
- afficher le tableau de sortie dans une image d'un userform
- creer un fichier de sortie (je n'arrive pas à modifier le binarydata de l'objet wia.imagefile)
Merci pour votre aide :
Private BMP1PATH As String
Private BMP2PATH As String
Private BMPOUTPUTPATH As String
Private RawImg1() As Byte
Private RawImg2() As Byte
Private RawOutputImg() As Byte
Sub Masque_DeuxImages()
Dim Img1 As Object, Img2 As Object
Dim V As Object, Img3 As Object
Dim i As Integer
'Création conteneur pour l'image à manipuler
Set Img1 = CreateObject("WIA.ImageFile")
'remarque: vous devez créer un conteneur pour chaque image
Set Img2 = CreateObject("WIA.ImageFile")
'Création du gestionnaire de filtre
Set IP = CreateObject("WIA.ImageProcess")
Set Img3 = CreateObject("WIA.ImageFile")
'Chargement de la 1ere image dans le conteneur
'(l'image qui sera placée au dessus)
Img1.LoadFile (BMP1PATH)
RawImg1 = Img1.FileData.BinaryData
'Chargement de la 2eme image dans le conteneur
Img2.LoadFile (BMP2PATH)
RawImg2 = Img2.FileData.BinaryData
If (UBound(RawImg1, 1) = UBound(RawImg2, 1)) Then
ReDim RawOutputImg(LBound(RawImg1) To UBound(RawImg1))
For inc = LBound(RawImg1) To 53
RawOutputImg(inc) = RawImg1(inc)
Next inc
NbOfPixels = (UBound(RawImg1, 1) + 1 - 54) / 4
For inc = 1 To NbOfPixels
RImg1 = RawImg1(inc + 53)
GImg1 = RawImg1(inc + 54)
BImg1 = RawImg1(inc + 55)
AlphaImg1 = RawImg1(inc + 56)
RImg2 = RawImg2(inc + 53)
GImg2 = RawImg2(inc + 54)
BImg2 = RawImg2(inc + 55)
AlphaImg2 = RawImg2(inc + 56)
If ( _
(RImg1 0 And GImg1 0 And BImg1 = 0) Or _
(RImg2 0 And GImg2 0 And BImg2 = 0) _
) Then
RawOutputImg(inc + 53) = 0
RawOutputImg(inc + 54) = 0
RawOutputImg(inc + 55) = 0
Else
WhiteLevelImg1 = CInt(RImg1) + CInt(GImg1) + CInt(BImg1)
WhiteLevelImg2 = CInt(RImg2) + CInt(GImg2) + CInt(BImg2)
If (WhiteLevelImg1 > 382 And WhiteLevelImg1 > 382) Then
RawOutputImg(inc + 53) = 255
RawOutputImg(inc + 54) = 255
RawOutputImg(inc + 55) = 255
Else
RawOutputImg(inc + 53) = 0
RawOutputImg(inc + 54) = 0
RawOutputImg(inc + 55) = 0
End If
End If
RawOutputImg(inc + 56) = 255
Next inc
Else
End If
' --> Je cale ici RawOutputImg, matrice à afficher
Img3.SaveFile (BMPOUTPUTPATH & "output.bmp")
End Sub