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

WinDev Discussion :

Manipulation d'une image


Sujet :

WinDev

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de Raptor92
    Homme Profil pro
    Directeur des opérations & Innovation
    Inscrit en
    Juin 2009
    Messages
    998
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur des opérations & Innovation
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 998
    Par défaut Manipulation d'une image
    Bonjour à Tous,

    Je commence la manipulation d'une image cliquable et je rencontre un problème.
    Malgré l'aide WD, je n'arrive pas à maitriser le problème suivant:

    1- J'ai créé une image
    2- En fond d'image, j'ai inséré un plan
    3- J'ai écrit le code suivant:

    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
    //TAILLE DE LA POLICE
    liFontSize est un entier = 8
    dDébutDessin(IMG_Image1)
    // Déclaration de la couleur et du style par défaut des différents tracés
    dStylo(Noir, 3)
    dPolice("Arial",liFontSize,iNormal,0)
    //PLAN DU CADASTRE
    dRectangle(370,25,660,210, Transparent, Noir) //R-RECEP
    dRectangle(660,25,690,120, Transparent, Noir)//R-BOU-PIK
    dRectangle(555,260,660,350, Transparent, Noir)//R-CLI-PIK
    dRectangle(455,260,555,305, Transparent, Noir)//R-BOU-RES
    dRectangle(455,305,555,350, Transparent, Noir)//R-CLI-RES
    dRectangle(250,170,370,250, Transparent, Noir)//R-BOU-PRE
    dRectangle(250,90,370,170, Transparent, Noir)//R-CLI-PRE
    //ZONES EXPEDITIONS
    dRectangle(55, 70, 115, 130, Transparent, RougeFoncé) //R-EXPED-CLIENTS
    dRectangle(175, 70, 115, 130, Transparent, RougeFoncé)//R-EXPED-BOUTIQUES

    Jusqu'à là, cela fonctionne.

    Mais je souhaite faire apparaitre le nom de la zone lorsque je clic dessus.
    Et je n'arrive pas à trouver la commande adéquate; J'ai tenté ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    x, y sont des entiers
    x = SourisPosX()
    y = SourisPosY()
    // Code de clic de IMAGE1
     
    SI x > y ALORS
    	LIB_Libellé1 = "R-EXPED-CLIENTS"
    SINON
    	LIB_Libellé1 = "R-EXPED-BOUTIQUES"
    FIN
    Mais je ne vois pas comment l'intégrer pour chaque zones dessinées

    Par avance merci pour votre aide
    Bonne journée
    Raptor92
    Dominique
    Aucune aide par MP, utilisez le forum.

    Mon guide du débutant pour apprendre à programmer en Java - N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java


  2. #2
    Membre Expert
    Avatar de mogwai162
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 376
    Par défaut
    Si j'ai bien comprtis, le but est de retouver dans quel rectangle tu as cliqué.

    Je présume que ceux ci ne se chevauchent pas.

    A ta place, je ferai déclarerais 4 tableaux ou j'inscrirais chacune des coordonnées (x-mini, x-maxi, y-mini et y-maxi) de chacun des rectangles, ensuite je les dessinerais.

    puis lors du clicage si x est compris entre x-mini et x-maxi et que u est compris entre y-mini et y-maxi tu as gagné.

  3. #3
    Membre éprouvé Avatar de Raptor92
    Homme Profil pro
    Directeur des opérations & Innovation
    Inscrit en
    Juin 2009
    Messages
    998
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur des opérations & Innovation
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 998
    Par défaut
    Bonjour Mogway,

    En effet, après contrôle, rien ne ce chevauche.
    J'ai bien compris ce que tu dit, sauf les tableaux.
    En effet, je vais finir par avoir à peut prêt 150 zones dans mon cadastre.

    Aurait tu la gentillesse de m'éclairer sur ce point
    Merci
    Raptor92
    Dominique
    Aucune aide par MP, utilisez le forum.

    Mon guide du débutant pour apprendre à programmer en Java - N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java


  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Par défaut
    Bonjour,

    L'esprit est de :

    - déclarer/mémoriser les zones de la carte
    - dessiner les zones sur la carte
    - à chaque clic, retourner la zone correspondante aux coordonnées cliquées

    Si vous dessinez directement les zones sur la carte sans les mémoriser (BDD, variable tableau), vous ne serez pas capable de dire quelle zone a été cliquée.

    Pour ça je propose les structures suivantes :

    - Le plan qui contient x zones
    - La zone qui est défini par 2 points et un libellé
    - Le point qui est défini par 2 coordonnées x,y

    L'implémentation suivante :

    Classe Point
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CPoint est une classe
    	X est un entier
    	Y est un entier
    FIN
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    PROCEDURE Constructeur(local pX est un entier, local pY est un entier)
     
    	:X = pX
    	:Y = pY
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    FONCTION EstDansRectangle(poRectangle est un CRectangle dynamique)
     
    	RENVOYER = ((:X >= poRectangle:oPoint1:X ET :X <= poRectangle:oPoint2:X) ET (:Y >= poRectangle:oPoint1:Y ET :Y <= poRectangle:oPoint2:Y))




    Classe Rectangle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CRectangle est une classe
    	oPoint1 est un CPoint dynamique
    	oPoint2 est un CPoint dynamique
    FIN
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    PROCEDURE Constructeur(poPoint1 est un CPoint dynamique, poPoint2 est un CPoint dynamique)
     
    	:oPoint1 = poPoint1 
    	:oPoint2 = poPoint2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    PROCEDURE Dessiner()
     
    	dRectange(:oPoint1:X, :oPoint1:Y, oPoint2:X, oPoint2:Y)




    Classe Zone plan rectangle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CZonePlanRectangle est une classe
    	hérite de CRectangle
     
    sLibelle est une chaine

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    PROCEDURE Constructeur(poPoint1 est un CPoint dynamique, poPoint2 est un CPoint dynamique, LOCAL psLibelle est une chaine)
    	Constructeur CRectangle(poPoint1, poPoint2)
     
    	:sLibelle = psLibelle




    Classe plan
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CPlan est une classe
    	sChampImage est une chaine
     
    	taboZonePlan est un tableau de 0 CZonePlanRectangle dynamique
    FIN
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    PROCEDURE Constructeur(LOCAL psChampImage est une chaine)
     
    :sChampImage = psChampImage

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    PROCEDURE AjouterZonePlanRectangle(poZoneRectangle est un CZonePlanRectangle dynamique)
     
    tableauAjoute(:taboZonePlan, poZoneRectangle)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    PROCEDURE Dessiner()
     
    dDébutDessin(:sChampImage)
     
    dStylo(Noir, 3)
    dPolice("Arial",liFontSize,iNormal,0)
     
    oZonePlanRectangle est un CZonePlanRectangle dynamique
    POUR TOUT ELEMENT oZonePlanRectangle DE :taboZonePlan
    	oZonePlanRectangle:Dessine()
    FIN

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    FONCTION ZoneRectangleDepuisPoint(poPoint est un CPoint dynamique)
     
    oZonePlanRectangle est un CZonePlanRectangle dynamique
    POUR TOUT ELEMENT oZonePlanRectangle DE :taboZonePlan
    	SI poPoint:EstDansRectangle(oZonePlanRectangle) ALORS
    		RENVOYER oZonePlanRectangle
    	FIN
    FIN




    Exemple de code

    Code de déclaration de la fenetre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    //Construction de l'image 
    oPlan est un CPlan(IMG_Image1)
     
    oPlan:AjouterZonePlanRectangle(allouer un CZonePlanRectangle(allouer un CPoint(370,25), allouer un CPoint(660,210), "R-RECEP"))
    ...
    ...
     
    oPlan:Dessine()
    //Code Clic sur image
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    oPointClic est un CPoint(SourisPosX(), SourisPosY())
    oZoneCliquee est un CZonePlanRectangle dynamique = oPlan:ZoneRectangleDepuisPoint(oPointClic)
     
    SI oZoneCliquee <> Null ALORS
    	Info("Vous avez cliqué sur la zone : " + oZoneCliquee:sLibelle)
    FIN

  5. #5
    Membre éprouvé Avatar de Raptor92
    Homme Profil pro
    Directeur des opérations & Innovation
    Inscrit en
    Juin 2009
    Messages
    998
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur des opérations & Innovation
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 998
    Par défaut
    Mogway,

    Avant tout, je ne sais quoi dire autre que merci

    Maintenant, je vais analyser tout cela et je vais recommencer ma programmation.
    De là, je ne manquerais pas de revenir vers vous.

    Vmolines,

    Force de constater que tes explications sont exceptionnelles.
    J'ai décidé de tester également ta solution, qui comme le dit Mogway est très complètes.

    Je saurais revenir vous dire la suite....

    Encore merci
    Et très bonne journée
    Raptor92
    Dominique
    Aucune aide par MP, utilisez le forum.

    Mon guide du débutant pour apprendre à programmer en Java - N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java


  6. #6
    Membre Expert
    Avatar de mogwai162
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 376
    Par défaut
    Euh.. oui

    La solution de vmolines est a priori meilleure que la mienne. la mienne etant simple voire simpliste et la sienne plus complete et orientée objet.

    Maintenant je prefere tout de même la mienne si c'est la sa seule utilisation. Si a l'avenir il y en a d'autres, la solution la plus complete risque de s'avérer la meilleure.

  7. #7
    Membre Expert
    Avatar de mogwai162
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 376
    Par défaut
    Si tu mets tout dans des tableaux il te suffira de parcourir tes tableaux

    Ainsi au lieu d'ecrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dRectangle(370,25,660,210, Transparent, Noir) //R-RECEP
    dRectangle(660,25,690,120, Transparent, Noir)//R-BOU-PIK
    dRectangle(555,260,660,350, Transparent, Noir)//R-CLI-PIK
    tu ecriras :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    T1[1] = 370
    T2[1] =   25
    T3[1] = 660
    T4[1] = 210
     
    Pour i = 1 à n
        dRectangle(T1[i], T2[i], T3[i], T4[i], Transparent, Noir)
    fin
    Puis idem pour les test de la position de la souris

Discussions similaires

  1. Visualisation et manipulation d'une image 3DS ?
    Par blackbird1 dans le forum OpenCV
    Réponses: 0
    Dernier message: 30/04/2014, 03h35
  2. manipulation d'une image, comment faire ?
    Par Virgile le chat dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 28/03/2009, 13h30
  3. [GD] Manipuler une image générée par php
    Par madvic dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 01/07/2008, 22h04
  4. Réponses: 19
    Dernier message: 04/03/2008, 10h36
  5. Manipulations autour d'une image
    Par ProgElecT dans le forum Vos contributions VB6
    Réponses: 4
    Dernier message: 30/11/2007, 11h01

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