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. #1
    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 Lire une image (IPictureDisp)
    Bonjour tout le monde,

    je travaille sur un sujet de reconnaissance de formes avec Visual Basic 6 et j'ai beasoin de charger des images et de lire leur contenu pour faire des traitements pas la suite. Autrement dit je dois récupérer l'image, que j'ai chargée grâce à la méthode loadpicture, sous forme d'une matrice pour faire mes calculs après. le problème c'est que j'arrive pas à convertir les IPictureDisp en des matrices afin de récupérer les valeur des pixel des images .

    Si quelqu'un sait comment faire son aide me sera précieuse !

    et merci d'avance

  2. #2
    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
    Je ne connais pas les images "IPictureDisp"
    Je sais que ce nom (comme on pourrait d'ailleurs en choisir un autre) est quelquefois utilisé pour être attribué à une structure.

    Je comprends par ailleurs assez mal ce que tu veux faire...
    Un bout de code et des précisions les plus claires possibles me permettraient (peut-être) d'y voir plus clair et de te donner un coup de main ...

  3. #3
    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 jmfmarques
    Je ne connais pas les images "IPictureDisp"
    Je sais que ce nom (comme on pourrait d'ailleurs en choisir un autre) est quelquefois utilisé pour être attribué à une structure.

    Je comprends par ailleurs assez mal ce que tu veux faire...
    Un bout de code et des précisions les plus claires possibles me permettraient (peut-être) d'y voir plus clair et de te donner un coup de main ...


    Merci


    voilà ce que je fait exactement pour insérer une image dans mon application :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PictureBox1 = LoadPicture("C:\image1.bmp")

    après le chargement de l'image, j'ai besoin d'avoir cette même image sous forme d'une matrice de même dimensions que celles de l'image pour faire des calculs après.

    exemple :
    si l'image que j'ai inséré est une image noire de 5 px * 5 px
    la matrice que je dois avoir est une matrice 5 * 5 de contenu 0 partout (la valeur de la couleur noir)


    j'arrive à le faire avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PictureBox1.Point(i, j)
    en parcourant toute l'image pixel par pixel mais le problème c'est que pour parcourir une image de 2000 x 2000 px il me faudra 3 minutes voir plus rien que pour avoir l'image sous une forme matricielle. il reste encore le temps de l'autre calcul de reconnaissance de formes qui est assez lent quand même.

    Donc je me demandais si il y a un moyen de récupérer cette matrice sans lire pixel par pixel sur l'écran mais directment à partir de IPictureDisp, ça sera certainement beacoup plus rapide.

    j'espère que c'est plus clair maintenant

  4. #4
    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
    Veux-tu s'il te plait définir clairement ce que TU entends par IPictureDisp qui (une autre fois) n'est pour moi qu'un nom donné (comme on aurait pu en donner un autre) ?

  5. #5
    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
    merci

    Citation Envoyé par jmfmarques
    Veux-tu s'il te plait définir clairement ce que TU entends par IPictureDisp qui (une autre fois) n'est pour moi qu'un nom donné (comme on aurait pu en donner un autre) ?





    c'est le type du résultat que retourne la fonction LoadPicture

  6. #6
    Membre chevronné
    Avatar de sovo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    1 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 389
    Points : 1 788
    Points
    1 788
    Par défaut
    je croit avoir compris ce que veux notre ami. Laison tombe ce fameux IPictureDisp.

    En fait je croit qu'il voudrais tout simplement pour chaque image qu'il charge dans son picture, creer une matrice (de degre 2).


    Pour cela je te conseille ceci :
    Lorsque tu charges une image, tu recuperes ce ca resolution (x pixel * y pixel)
    ensuite tu redimensionnes ta matrice, en fonction des x et y
    enfin tu initialise le tableau a 0 (comme tu le desire).
    "Toute question a une reponse. Et chaque reponse est une nouvelle question." Albert EINSTEIN

    En cas de Question resolu, n'oubliez pas

  7. #7
    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 sovo
    je croit avoir compris ce que veux notre ami. Laison tombe ce fameux IPictureDisp.

    En fait je croit qu'il voudrais tout simplement pour chaque image qu'il charge dans son picture, creer une matrice (de degre 2).


    Pour cela je te conseille ceci :
    Lorsque tu charges une image, tu recuperes ce ca resolution (x pixel * y pixel)
    ensuite tu redimensionnes ta matrice, en fonction des x et y
    enfin tu initialise le tableau a 0 (comme tu le desire).

    oui mais je dois avoir, comme contenu de la matrice, les valeurs des pixels et non pas toujours 0 comme dans l'exmple.

  8. #8
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 171
    Points
    17 171
    Par défaut
    'fonction beaucoup plus rapide que Point et Step de VB

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    'pour donner la couleur au pixel(x,y) 
    Public Declare Function SetPixel Lib "gdi32" ( _
        ByVal hdc As Long, _
        ByVal X As Long, _
        ByVal Y As Long, _
        ByVal crColor As Long) As Long
     
    'pour lire la couleur d'un pixel se situant en (x,y)
    Public Declare Function GetPixel Lib "gdi32" ( _
        ByVal hdc As Long, _
        ByVal X As Long, _
        ByVal Y As Long) As Long
    ProgElecT
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  9. #9
    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 ProgElecT
    'fonction beaucoup plus rapide que Point et Step de VB

    'pour donner la couleur au pixel(x,y)
    Public Declare Function SetPixel Lib "gdi32" ( _
    ByVal hdc As Long, _
    ByVal X As Long, _
    ByVal Y As Long, _
    ByVal crColor As Long) As Long

    'pour lire la couleur d'un pixel se situant en (x,y)
    Public Declare Function GetPixel Lib "gdi32" ( _
    ByVal hdc As Long, _
    ByVal X As Long, _
    ByVal Y As Long) As Long

    ProgElecT
    merci mais justement c'est ce que je fesais, le problème c'est que c'est long comme ça. et ma question est : est-ce que il y a un moyen de récupérer les valeurs des pixels sans passer par l'écran et lire pixel par pixel mais plutôt directement à partir de l'objet IPictureDisp.

  10. #10
    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
    Ecoute Uranium,

    je ne suis pas aussi enrichi que toi et ignore totalement ce qu'est un objet IpictureDisp "membre VBGlobal"
    Pour autant que je le sache IpictureDisp est un nom souvent utilisé comme nom de baptème d'une structure.

    Il est vrai que je n'utilise en ce qui me concerne que VB5.

    Je suis pauvre et ne sais pas ce qu'offre VB6 en matière de traitement d'images. Il y a par contre une chose que je sais bien : lorsque je veux traiter les pixels d'une image très rapidement, autrement que pixel par pixel, je passe par une ou plusieurs Apis de Windows et mes traitements "infirmes" sont, eux, très rapides (travail sur les bits d'un DIB)

    Mais quand je vois l'image que tu as mise en pièce jointe, je me dis que VB6 offre peut-être du "plus mieux" et ouvre donc mes yeurx tout grand....

    Le progrès m'a toujours intéressé et attends donc avec la plus grande curiosité ce qu'il en sort afin, chronomètre en main, de mesurer en connaissance de cause toutes ces nouvelles performances...

    Je regarde donc, depuis mon petit coin...

  11. #11
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 332
    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 332
    Points : 718
    Points
    718
    Par défaut
    Math et traitement d'image: ça m'intéresse. Y'a toujours quelqu'un?

    J'aimerais savoir une chose: la taille de l'image est-elle aléatoire?
    Xavier

  12. #12
    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
    J'aimerais savoir une chose: la taille de l'image est-elle aléatoire?
    Bonjour asdorve,

    Non, elle n'est pas aléatoire et dépend du nombre de pixels en hauteur et en largeur, mais également du "système" de couleurs (16, 256, 32 bits, etc...) ainsi que de son format.

    Je ne sais pas ce qu'est devenu notre ami...

  13. #13
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 332
    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 332
    Points : 718
    Points
    718
    Par défaut
    ç'a m'a l'air intéressant, surtout qu'en ce moment je m'ennuie pas mal au boulot, tout le monde en vacances et rien à faire...
    Xavier

  14. #14
    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
    Alors suis, asdorve.

    Mais je ne continuerai sur ce sujet que si le demandeur sait montrer qu'il peut parler avec précision de chaque chose. Dans le cas contraire, je m'abstiendrai, comme d'habitude.

  15. #15
    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
    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.
    La connaissance seule ne suffit pas. La vraie compréhension vient de la mise en expérience.
    Règles|FAQ|Tuto

  16. #16
    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
    C'est une bonne méthode parmi d'autres, Avi.
    Je l'ai utilisée fréquemment.

    Tu verras comment l'utiliser lorsqu'un travail que j'ai remis il y a déjà pas mal de temps aura été rendu accessible aux forumeurs.

    Quand à notre ami, j'attendrai, comme je l'ai dit, qu'il me montre de façon précise que je peux continuer avec lui sur ce sujet.

    Bonne journée

  17. #17
    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
    Mise en situation exacte de ce que je dois faire :

    je vais récupérer des esquisses faites à la main puis scannées sur un scanneur et essayer de détecter les droites, les cercles, les segments, les ellipses qui y se trouvent grâce à la transformée de Hough. Et donc naturellement pour pouvoir faire ceci je dois avoir mon image sous forme d'une matrice afin de pouvoir y chercher les éléments à detecter et voilà.

    un lien utile pour les gens qui connaissent pas la transformée de Hough :

    http://www.tsi.enst.fr/tsi/enseignem...ses/Hough.html

  18. #18
    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 jmfmarques
    Alors suis, asdorve.

    Mais je ne continuerai sur ce sujet que si le demandeur sait montrer qu'il peut parler avec précision de chaque chose. Dans le cas contraire, je m'abstiendrai, comme d'habitude.
    Je vous remercie tous pour votre attention

    Mise en situation exacte de ce que je dois faire :

    je vais récupérer des esquisses faites à la main puis scannées sur un scanneur et essayer de détecter les droites, les cercles, les segments, les ellipses qui y se trouvent grâce à la transformée de Hough. Et donc naturellement pour pouvoir faire ceci je dois avoir mon image sous forme d'une matrice afin de pouvoir y chercher les éléments à detecter et voilà.

    un lien utile pour les gens qui connaissent pas la transformée de Hough :

    http://www.tsi.enst.fr/tsi/enseignem...ses/Hough.html



    Je rappelle que j'arrive à récupérer les pixels de l'image sous forme de matrice (c'est exactement ce que je veux) mais c'est leeeeeeent (parfois plus de 6 minutes) car ce que je fais pour l'instant c'est de parcourir l'image toute entière pixel par pixel et lire sur l'écran la valeur de la couleur du pixel afin de la stocker dans ma matrice.

    Il y a moyen pour faire l'inverse et c'est ultra rapide : passer d'une matrice vers une image.

    il doit certainement y avoir un moyen pour faire l'autre passage de l'image à la matrice et de la même rapidité non ?

  19. #19
    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
    doit certainement y avoir un moyen pour faire l'autre passage de l'image à la matrice et de la même rapidité non ?
    Oui !
    Et avigeilpro en a signalé un (parmi d'autres).

    Si tu sais utiliser et comprend la transformée de Hough (qui est finalement la recherche des contours),

    l'utilisation des Apis signalées par Avigeilpro sera pour toi un jeu d'enfant (de la gnognotte, en comparaison)...

    Là, vois-tu, ton savoir m'a largement semé....

    Un grand bravo à toi .

  20. #20
    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 jmfmarques
    Oui !
    Et avigeilpro en a signalé un (parmi d'autres).


    Oui effectivement ! je viens de tester le code et ça marche à merveille, sauf que il faudra transformer le tableau unidirectionnel vers une matrice bidimensionnelle. C'est simple à faire puisqu'on a le BytesPerLine et voilà.

    Je vous remercie infiniment les gars, vous m'avez sauvé

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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