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

Composants VCL Delphi Discussion :

Afficher une fraction d'image dans TImage


Sujet :

Composants VCL Delphi

  1. #1
    Membre actif

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    479
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 479
    Points : 267
    Points
    267
    Par défaut Afficher une fraction d'image dans TImage
    Bjr

    Je réalise une application Delphi 7 qui permet de faire du géocodage sur une image géographique. Il suffit de fournir les coordonnes (Lambert) de deux points de l'image pour que toute position de la souris puisse être convertie en Lambert quelque soit la taille donnée à la fenêtre de l'application sur l'écran.

    Les considérations géographiques ne sont pas la base de mon problème qui est le suivant : L'image-carte peut dépasser très largement la taille de l'écran. Il est possible d'utiliser l'option stretch du TImage mais cela dégrade la précision du pointage. Je voudrais agrandir l'image sans que le TImage change de taille et donc évidemment en affichant qu'une partie de l'image sur laquelle il sera possible de naviguer.

    Je ne vois pas comment faire cela avec un TImage ?

    Existe t il une solution ?

    Merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Citation Envoyé par frantzgac Voir le message
    Existe-t-il une solution ?
    Bien sûr ! Avec deux traits d'union, et un TBitmap de travail qui sera à la taille de l'image de ton fichier et sur lequel tu pourras te déplacer comme si tu te déplaçais sur le TImage, en recopiant la partie concernée du TBitmap dans le TImage pour voir où tu es et où tu vas.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  3. #3
    Membre actif

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    479
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 479
    Points : 267
    Points
    267
    Par défaut
    Merci.
    J'envisageais quelque chose de ce genre mais espérais qu'il existât un procédé plus intégré.
    En revanche les "traits d'union" je ne vois ce que c'est en dehors de l'appellation académique du "tiret du 6" du clavier.
    Et recopier une partie d'image (comment se définit la partie) dans une autre je ne vois pas non plus quelle fonction fait cela.

  4. #4
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Yep !
    Citation Envoyé par frantzgac Voir le message
    J'envisageais quelque chose de ce genre mais espérais qu'il existât un procédé plus intégré.
    ...
    Et recopier une partie d'image (comment se définit la partie) dans une autre je ne vois pas non plus quelle fonction fait cela.
    J'ai passé la matinée à retourner le web sans rien trouver (je n'ai sans doute pas utilisé les bons mots-clé...)

    Recopier une partie d'image doit se faire en démarrant sur l'événement OnMouseDown et se terminer sur OnMouseUp, ça va déterminer un rectangle (et il va falloir jouer sur les coordonnées client versus screen, toute une histoire...), plus le fait que j'ai quand même découvert qu'en termes de "large images" il vaut mieux ne pas dépasser la taille maxi du bureau (limitations de la carte graphique). Au-delà, il faut découper la super-grande image en autant de bouts entrant dans cette dimension maxi.
    Va falloir tout faire à la mano, donc réfléchir très fort et très longtemps, et se poser des questions existentielles genre je démarre la sélection sur une partie de l'image qui est affichée sur la fiche, ok, mais je l'arrête où ?
    - en sortant de l'image ?
    - de la fiche (en aveugle, à moins de faire déplacer l'image) ?
    - du bureau (même remarque) ?

    Bon, il est possible d'attendre que d'autres lecteurs plus au fait de tout ça viennent poster leur grain de sel, mais là c'est week-end et après c'est vacances...

    Citation Envoyé par frantzgac Voir le message
    En revanche les "traits d'union" je ne vois ce que c'est en dehors de l'appellation académique du "tiret du 6" du clavier.
    C'est bien de cette touche dont je parlais.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  5. #5
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 388
    Points : 2 999
    Points
    2 999
    Par défaut
    Je ne suis pas spécialiste du web mais il me semble qu'il y a une technique qui permet de "découper" une image en zone et ensuite d'afficher celle que l'on veut.
    Est-ce qu'il n'y aurait pas une solution mixte avec un TWebBrowser et cette technique ?

  6. #6
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    un petit exemple tout simple qui fonctionne : j'ai juste posé un TPaintBox dans une Form, avec 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
    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
    type
      TForm1 = class(TForm)
        PaintBox1: TPaintBox;
        procedure PaintBox1Paint(Sender: TObject);
        procedure PaintBox1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
        procedure PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
        procedure FormCreate(Sender: TObject);
      private
        FBitmap: TBitmap;
        FOffset: TPoint;
        FLastPointSet: TPoint;// point a partir duquel calculer le mouvement de souris
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.PaintBox1Paint(Sender: TObject);
    begin
      //ici, eventuellement, une restriction du XY pour que l'image ne soit pas completement en dehors de l'ecran
      PaintBox1.Canvas.Draw(FOffset.X, FOffset.Y, FBitmap);
    end;
     
    procedure TForm1.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    begin
      if ssLeft in Shift then
        FLastPointSet := Point(X, Y);
    end;
     
    procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    begin
      if ssLeft in Shift then
      begin
        FOffset.X := FOffset.X + X - FLastPointSet.X;
        FOffset.Y := FOffset.Y + Y - FLastPointSet.Y;
        FLastPointSet := Point(X, Y);
        PaintBox1.Invalidate;
      end;
    end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      Self.DoubleBuffered := true;
      FBitmap := TBitmap.Create;
      FBitmap.LoadFromFile('C:\Users\Alex\Pictures\perceuse.png.alpha.bmp');
    end;

  7. #7
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 694
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 694
    Points : 13 130
    Points
    13 130
    Par défaut
    Je ne comprends pas trop le problème, un TImage dans un TScrollBox et le tour est joué !

  8. #8
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Bonjour,
    Citation Envoyé par guillemouze Voir le message
    un petit exemple tout simple qui fonctionne : j'ai juste posé un TPaintBox dans une Form, avec le code suivant :
    Citation Envoyé par Andnotor Voir le message
    Je ne comprends pas trop le problème, un TImage dans un TScrollBox et le tour est joué !
    Malgré cette contrainte ? :
    Citation Envoyé par frantzgac Voir le message
    L'image-carte peut dépasser très largement la taille de l'écran.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  9. #9
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 421
    Points : 5 820
    Points
    5 820
    Par défaut
    salut

    bien sur les "scrollbar" sont fait pour ça
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  10. #10
    Membre éprouvé
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Points : 1 072
    Points
    1 072
    Par défaut
    Citation Envoyé par anapurna Voir le message
    salut

    bien sur les "scrollbar" sont fait pour ça
    et même sans les "ScrollBars"
    1 TPanel
    1 TImage dedans avec AutoSize à True:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    procedure TForm1.OffsetImage(aPos: TPoint);
    begin
      Image1.Top := aPos.Y;
      Image1.Left := aPos.X;
    end;
     
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      Image1.Picture.LoadFromFile('The Lost Watch II NV Screenshot 01.bmp');// Choisir un Bitmap plus grand que le Panel
      OffsetImage(Point(Panel1.ClientWidth - Image1.Picture.Bitmap.Width, Panel1.ClientHeight - Image1.Picture.Bitmap.Height));
    end;
    ce code place l'image sur son coin inférieur droit en tenant compte de la taille de la zone d'affichage (le TPanel)

    Cordialement,
    @+

Discussions similaires

  1. Réponses: 11
    Dernier message: 10/10/2012, 15h17
  2. Afficher une liste d'images dans une cellule
    Par thierryler dans le forum Composants
    Réponses: 2
    Dernier message: 18/05/2011, 21h31
  3. Afficher une suite d'image dans un JScrollPane
    Par bilibou dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 31/05/2009, 09h24
  4. afficher une liste d'image dans la mème interface
    Par soforan dans le forum Interfaces Graphiques
    Réponses: 7
    Dernier message: 05/05/2008, 14h42
  5. Faire pivoter une image dans TImage
    Par Bourak dans le forum Langage
    Réponses: 4
    Dernier message: 17/03/2006, 08h51

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