IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

Lire une image (IPictureDisp)


Sujet :

VB 6 et antérieur

  1. #21
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 336
    Points : 718
    Points
    718
    Par défaut
    Une fois que tu auras terminé, te serait-il possible de publier le soure dans la partie contribution vb6. Je trouve ça intéressant et serais curieux de comprendre la totalité (avec la méthode de Hough que je ne connais pas d'ailleurs.)

    Ne t'arrête pas là, continu comme ça!

  2. #22
    Nouveau membre du Club
    Inscrit en
    Août 2006
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 79
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par Asdorve
    Une fois que tu auras terminé, te serait-il possible de publier le soure dans la partie contribution vb6. Je trouve ça intéressant et serais curieux de comprendre la totalité (avec la méthode de Hough que je ne connais pas d'ailleurs.)

    Ne t'arrête pas là, continu comme ça!
    Je le ferais, je publierai un module de reconnaissance des droites et de cercles. ça sera avec plaisir de partager ce qu'on sait faire

  3. #23
    Nouveau membre du Club
    Inscrit en
    Août 2006
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 79
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par avigeilpro
    J'ai trouvé cela dans API-Guide mais je ne sais pas l'utiliser, il semblerait pourtant que cela se rapproche de ce que Uranium souhaite faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    'Create a new project, add a command button and a picture box to the project, load a picture into the picture box.
    'Paste this code into Form1
    Private Type BITMAP
        bmType As Long
        bmWidth As Long
        bmHeight As Long
        bmWidthBytes As Long
        bmPlanes As Integer
        bmBitsPixel As Integer
        bmBits As Long
    End Type
    Private Declare Function GetObject Lib "gdi32" Alias "GetObjectA" (ByVal hObject As Long, ByVal nCount As Long, lpObject As Any) As Long
    Private Declare Function GetBitmapBits Lib "gdi32" (ByVal hBitmap As Long, ByVal dwCount As Long, lpBits As Any) As Long
    Private Declare Function SetBitmapBits Lib "gdi32" (ByVal hBitmap As Long, ByVal dwCount As Long, lpBits As Any) As Long
    Dim PicBits() As Byte, PicInfo As BITMAP
    Dim Cnt As Long, BytesPerLine as Long
    Private Sub Command1_Click()
        'KPD-Team 1999
        'URL: http://www.allapi.net/
        'E-Mail: KPDTeam@Allapi.net
        'Get information (such as height and width) about the picturebox
        GetObject Picture1.Image, Len(PicInfo), PicInfo
        'reallocate storage space
        BytesPerLine = (PicInfo.bmWidth * 3 + 3) And &HFFFFFFFC
        ReDim PicBits(1 To BytesPerLine * PicInfo.bmHeight * 3) As Byte
        'Copy the bitmapbits to the array
        GetBitmapBits Picture1.Image, UBound(PicBits), PicBits(1)
        'Invert the bits
        For Cnt = 1 To UBound(PicBits)
            PicBits(Cnt) = 255 - PicBits(Cnt)
        Next Cnt
        'Set the bits back to the picture
        SetBitmapBits Picture1.Image, UBound(PicBits), PicBits(1)
        'refresh
        Picture1.Refresh
    End Sub
    PicBits semble etre un tableau contenant les bits d'une image, reste "plus qu'a" le transformer en tableau à 2 dimension contenant les couleurs en Long.
    Merci avigeilpro, le code marche super bien néanmoins j'ai eu quelques petites difficultés à le comprendre. J'ai pas compris l'unité de BytesPerLine est-ce que c'est le pixel ou quoi exactement parce que dans mon programme ça correspond ni à la largeur de mon image en pixel, ni à la longueur et donc j'ai eu du mal à convertir le tableau unidimensionel vers une matrice bidimensionnel.
    D'autant plus que UBound(PicBits) doit normalement être égal au nombre d'éléments de la matrice (Largeur * Longueur) non ? car la matrice 2D c'est le même tableau 1D mais disposé différement et le nombre d'éléments ne change pas

  4. #24
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 336
    Points : 718
    Points
    718
    Par défaut
    je viens de lire ton lien sur Hough, je trouve ça énormissime. Vive les mathématiques...

  5. #25
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Merci avigeilpro, le code marche super bien néanmoins j'ai eu quelques petites difficultés à le comprendre. J'ai pas compris l'unité de BytesPerLine est-ce que c'est le pixel ou quoi exactement parce que dans mon programme ça correspond ni à la largeur de mon image en pixel, ni à la longueur et donc j'ai eu du mal à convertir le tableau unidimensionel vers une matrice bidimensionnel.
    D'autant plus que UBound(PicBits) doit normalement être égal au nombre d'éléments de la matrice (Largeur * Longueur) non ? car la matrice 2D c'est le même tableau 1D mais disposé différement et le nombre d'éléments ne change pas
    Là, tu vois,.... il y a certains paradoxes que je n'aime vraiment pas...

    Bonne chance à toi donc, Uranium... tu devras continuer sans moi, et c'est bien dommage !

  6. #26
    Nouveau membre du Club
    Inscrit en
    Août 2006
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 79
    Points : 38
    Points
    38
    Par défaut Code Final (Matrice <=> Image)
    Conclusion :
    Après de multiples essais, voici mes chers amis le code final inspiré de la source de avigeilpro (Merci à vous tous ) :




    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    'Le but de ce code est de pouvoir copier une image vers une matrice et vice versa.
    'Pour illustrer ceci, ce code va premièrement copier une picturebox dans une matrice
    'puis il va recopier cette même matrice dans une autre picture box et les deux
    'transformations sont faites d'une manière directe sans passer pixel par pixel (Ultra rapides)
     
    'Insérer deux images Picturebox dans une forme : Picture1 (Source) et Picture2 (Destination)
     
     
    'Origine de la source (Largement modifiée)
     
        'KPD-Team 1999
        'URL: <a href="http://www.allapi.net/" target="_blank">http://www.allapi.net/</a>
        'E-Mail: KPDTeam AT Allapi DOT net
     
    Option Explicit
    Option Base 1
     
    Private Type BITMAP
        bmType As Long
        bmWidth As Long
        bmHeight As Long
        bmWidthBytes As Long
        bmPlanes As Integer
        bmBitsPixel As Integer
        bmBits As Long
    End Type
     
    Private Type Pixel
        Red As Byte
        Green As Byte
        Blue As Byte
    End Type
     
    Private Declare Function GetObject Lib "gdi32" Alias "GetObjectA" (ByVal hObject As Long, ByVal nCount As Long, lpObject As Any) As Long
    Private Declare Function GetBitmapBits Lib "gdi32" (ByVal hBitmap As Long, ByVal dwCount As Long, lpBits As Any) As Long
    Private Declare Function SetBitmapBits Lib "gdi32" (ByVal hBitmap As Long, ByVal dwCount As Long, lpBits As Any) As Long
     
    Dim Matrice() As Pixel
    Dim NHeight, MWidth As Integer
     
    Private Sub MatrixFromImage(Picture As PictureBox, Matrice() As Pixel)
     
        Dim PicBits() As Byte, PicInfo As BITMAP
        Dim Size As Long
        Dim i, j As Integer
        Dim Z As Long
     
        GetObject Picture.Image, Len(PicInfo), PicInfo
     
        Size = PicInfo.bmWidth * PicInfo.bmBitsPixel * PicInfo.bmHeight / 8
     
        ReDim PicBits(Size) As Byte
        ReDim Matrice(PicInfo.bmHeight, PicInfo.bmWidth) As Pixel
     
        GetBitmapBits Picture.Image, Size, PicBits(1)
     
        For i = 1 To PicInfo.bmHeight
            For j = 1 To PicInfo.bmWidth
                Z = (i - 1) * PicInfo.bmWidth * 4 + (j - 1) * 4 + 1
                Matrice(i, j).Blue = PicBits(Z)
                Matrice(i, j).Green = PicBits(Z + 1)
                Matrice(i, j).Red = PicBits(Z + 2)
            Next j
        Next i
     
        NHeight = PicInfo.bmHeight
        MWidth = PicInfo.bmWidth
     
    End Sub
     
    Private Sub ImageFromMatrix(Picture As PictureBox, Matrice() As Pixel)
        Dim PicBits() As Byte
        Dim i, j As Integer
        Dim Z As Long
     
        ReDim PicBits(UBound(Matrice(), 1) * UBound(Matrice(), 2) * 4)
     
        For i = 1 To UBound(Matrice(), 1)
            For j = 1 To UBound(Matrice(), 2)
                Z = Z + 1
     
                PicBits(Z) = Matrice(i, j).Blue
                PicBits(Z + 1) = Matrice(i, j).Green
                PicBits(Z + 2) = Matrice(i, j).Red
                PicBits(Z + 3) = 0
     
                Z = Z + 3
            Next j
        Next i
     
        SetBitmapBits Picture.Image, UBound(PicBits), PicBits(1)
        Picture.Refresh
    End Sub
     
    Private Sub Form_Load()
        Dim i, j As Integer
     
        Picture1.Picture = LoadPicture("c:\candle.jpg")
     
        'Copie de l'image1 vers une matrice    
        Call MatrixFromImage(Picture1, Matrice())
     
     
        'Inversion des couleurs de l'image
        'Tout les calculs se font maintenant sur la matrice (que c'est facile et rapide !)  
     
        For i = 1 To NHeight
            For j = 1 To MWidth
                Matrice(i, j).Blue = 255 - Matrice(i, j).Blue
                Matrice(i, j).Green = 255 - Matrice(i, j).Green
                Matrice(i, j).Red = 255 - Matrice(i, j).Red
            Next j
        Next i
     
        'Copie de la matrice vers l'image2    
        Call ImageFromMatrix(Picture2, Matrice())
     
    End Sub

  7. #27
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    La prochaine fois, pense à utiliser les balises [code] (je l'ai fait pour toi) et cliquer sur le bouton résolu.

  8. #28
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 336
    Points : 718
    Points
    718
    Par défaut
    t'es sûr que ça marche?

    regarde ce que ça me fait...
    Images attachées Images attachées  

  9. #29
    Nouveau membre du Club
    Inscrit en
    Août 2006
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 79
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par Asdorve
    t'es sûr que ça marche?

    regarde ce que ça me fait...
    Désolé d'avoir tardé à répondre je suis maintenant en vacances (déconnexion totale)

    Je crois que le résultat n'est par satisfaisant parce que les deux images n'ont pas la même taille donc c'est un petit peu normal que le code fasse ceci. Tu changes la taille de l'image de destination de telle façon qu'elle ait la même taille que l'image source et comme ça, en principe, ça va marcher parce que moi je l'ai essayé et ça a marché très bien.

    Bonne chance, j'attends ton résultats bye

  10. #30
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 336
    Points : 718
    Points
    718
    Par défaut
    ben, ça a l'air de marcher...

  11. #31
    Membre éprouvé Avatar de avigeilpro
    Homme Profil pro
    Ambulancier
    Inscrit en
    Janvier 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Ambulancier
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2004
    Messages : 880
    Points : 971
    Points
    971
    Par défaut
    Merci de me remercier autant mais je signal juste que je n'ai rien fait, le code que j'ai fourni n'est pas de moi, j'ai juste eu à faire un copier collé de l'API-GUIDE que l'on peut trouver dans les outils de ce forum

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Lire une image en Java
    Par didulle dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 26/12/2006, 12h13
  2. Lire une image PGM
    Par ToTo13 dans le forum Langage
    Réponses: 7
    Dernier message: 09/10/2006, 18h39
  3. Lire une image Tiff en C/cpp avec Lib tiff
    Par syn_42 dans le forum MFC
    Réponses: 4
    Dernier message: 04/01/2006, 21h28
  4. lire une image et tracer une fonction
    Par Battosaiii dans le forum C
    Réponses: 4
    Dernier message: 23/11/2005, 15h21
  5. lire une image au format RAW
    Par Anonymous dans le forum OpenGL
    Réponses: 5
    Dernier message: 20/05/2002, 00h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo