Vba traitement de matrice pixels bmp, wia, argb et affichage userform

Maxtroubadour Messages postés 4 Date d'inscription samedi 19 mars 2011 Statut Membre Dernière intervention 22 mars 2011 - 19 mars 2011 à 08:08
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Derniè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

2 réponses

Maxtroubadour Messages postés 4 Date d'inscription samedi 19 mars 2011 Statut Membre Dernière intervention 22 mars 2011
19 mars 2011 à 08:10
    'Création du gestionnaire de filtre
    Set IP = CreateObject("WIA.ImageProcess")
    

est à retirer.
cdlt.
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
15 mai 2011 à 18:58
Bonjour,

Pour une question VBA, il fallait poster sur vbfrance dans le thème VBA :
Visual Basic 6 / Langages dérivés / VBA

[ Déplacé sur vbfrance ]
0
Rejoignez-nous