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

Delphi Discussion :

Effet de zoom


Sujet :

Delphi

  1. #1
    Membre éprouvé Avatar de b_reda31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    avril 2007
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : avril 2007
    Messages : 878
    Points : 940
    Points
    940
    Par défaut Effet de zoom
    Bonjour à tous,je voudrai savoir comment est il possible de réaliser un zoom sur une image (affichée dans un Timage),Merci.
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste!!»

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    mars 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : mars 2007
    Messages : 91
    Points : 95
    Points
    95
    Par défaut
    voici le code
    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
    function TForm1.GetZoomRect: TRect;
    const
      T:array[-5..5] of Single=(0.1,0.2,0.3,0.5,0.75,1,1.5,2,3,5,10);
    begin
      Result.TopLeft:=Point(0,0);
      Result.Right:=Round(FSrcBitmap.Width*T[TrackBar1.Position]);
      Result.Bottom:=Round(FSrcBitmap.Height*T[TrackBar1.Position]);
    end;
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      FSrcBitmap:=TBitmap.Create;
      FSrcBitmap.LoadFromFile({path});
    end;
    procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      FSrcBitmap.Free;
    end;
     
    procedure TForm1.TrackBar1Change(Sender: TObject);
    begin
      img1.Canvas.StretchDraw(GetZoomRect,FSrcBitmap);
    end;

  3. #3
    Membre éprouvé Avatar de b_reda31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    avril 2007
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : avril 2007
    Messages : 878
    Points : 940
    Points
    940
    Par défaut
    merci pour votre reponse mais je n'ai pas trés bien saisi ce bout de code...existe t il une fonction qui permet de faire un zoom sur un timage??
    je vous rassure j'ai cherché sur l'aide mais je n'ai rien trouvé :-(
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste!!»

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : octobre 2005
    Messages : 2 396
    Points : 3 258
    Points
    3 258
    Par défaut
    Bonjour,

    je n'ai pas trés bien saisi ce bout de code
    ... dans la procedure TForm1.FormCreate(Sender: TObject) on crée le BitMap (support invisible mémorisant un dessin ou d'une photo) nommé FSrcBitmap qu'on charge depuis le disque avec FSrcBitmap.LoadFromFile(c:\...\'monFichier.bmp');

    ... et dans la procedure TForm1.TrackBar1Change(Sender: TObject) l'instruction img1.Canvas.StretchDraw(GetZoomRect,FSrcBitmap) dessine dans le TImage le Bitmap précédent FSrcBitmap ramené à l'échelle (StretchDraw) du rectangle GetZoomRect obtenu avec la function TForm1.GetZoomRect: TRect en fonction de la TrackBar1.Position.
    ... et avec la procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction) on libère la mémoire correspondante avec FSrcBitmap.Free.

    je vous rassure j'ai cherché sur l'aide mais je n'ai rien trouvé
    ... je n'ai jamais vu une telle fonction dans l'Aide Delphi, mais il n'y a pas de raison que le code fourni par J_apprenti ne marcherait pas : suffit de l'essayer il n'est pas long.
    A+
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    mars 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : mars 2007
    Messages : 91
    Points : 95
    Points
    95
    Par défaut
    Salut.
    tu dois faire une copie de l'image deja afficher dans Timage comme un TBitmap pour se servir de la methode StretchDraw du canvas du Bitmap, ensuite faire le traitement en memoir sur ton bitmap puis afficher le resultat dans timage
    je crois qu'une autre source pourra bien t'aider
    Petit utilitaire de traitement d'image JPEG realisè par mr Sub0
    Zoom, luminosité, contraste, flou gaussien, qualité JPEG, prévisualisation et sauvegarde.
    Enregistrement des paramètres de l'appli dans un fichier INI...

  6. #6
    Membre éprouvé Avatar de b_reda31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    avril 2007
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : avril 2007
    Messages : 878
    Points : 940
    Points
    940
    Par défaut
    Merci pour l'utilitaire,il regroupe une grande partie de ce que je veux réaliser ,me reste plus qu'à le comprendre
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste!!»

  7. #7
    Membre éprouvé Avatar de b_reda31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    avril 2007
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : avril 2007
    Messages : 878
    Points : 940
    Points
    940
    Par défaut
    Merci Gilbert Geyer pour les explications,ça devient plus clair dans ma tête
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste!!»

  8. #8
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : décembre 2002
    Messages : 3 573
    Points : 4 213
    Points
    4 213
    Par défaut
    Salut!

    Pour info, je possède un code pour effectuer un zoom avec un filtre anti-aliasing (comme dans l'aperçu de windows) ce qui permet d'obtenir une qualité d'image supérieure à la méthode stretch :

    http://sub0.developpez.com/delphi/AAlias.zip
    De retour parmis vous après 10 ans!!

  9. #9
    Membre éprouvé Avatar de b_reda31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    avril 2007
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : avril 2007
    Messages : 878
    Points : 940
    Points
    940
    Par défaut
    Merci SubZero pour ce petit utilitaire,il est super mais je ne trouve pas le code pour le zoom la dedans
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste!!»

  10. #10
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : décembre 2002
    Messages : 3 573
    Points : 4 213
    Points
    4 213
    Par défaut
    Il s'agit de la fonction Stretch32 de l'unité Transforms.pas. Tu trouveras un exemple d'utilisation de cette fonction dans l'unité Unit1.pas... Pour info, le redimensionnement avec filtre anti-aliasing nécessite plus de ressources qu'un simple stretchdraw et ce filtre est surtout utile pour réduire les images, plus que pour les grossir...

    Dans mon jeu d'échecs, lorsqu'on redimensionne la fenêtre, j'utilise un simple StretchDraw puis j'ajoute le filtre anti-aliasing lorsqu'on relache le bouton de la souris. Cette démo te permettra de bien visualiser la différence entre les 2 méthodes de redimensionnement d'images...
    De retour parmis vous après 10 ans!!

  11. #11
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    12 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2007
    Messages : 12 454
    Points : 33 606
    Points
    33 606
    Billets dans le blog
    42
    Par défaut
    c'est peut-être un peu tard pour dire cela mais il existe un bon composant Zoom dans la JVCL
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio, Sidney) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  12. #12
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2003
    Messages : 2 474
    Points : 2 120
    Points
    2 120
    Par défaut
    Pour un tit editeur d'image perso, j'utilise un TImage avec les property : Center/Stretch/Proportional a true et je joue sur le Width/Height .....

    Si tu souhaite faire de la qualité, passe par l'unitee ALGraphic (a dl sur le net) pour copier de maniere lissée.
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Flou radial - Effet de zoom
    Par cyber_N dans le forum Traitement d'images
    Réponses: 9
    Dernier message: 07/10/2008, 19h20
  2. Effet de zoom au survol d'une image
    Par bszakaria dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 27/05/2008, 18h02
  3. effet de zoom
    Par benlabete dans le forum Flash
    Réponses: 17
    Dernier message: 14/01/2008, 00h29
  4. Réponses: 6
    Dernier message: 15/01/2007, 12h15
  5. [FLASH MX] Effet de zoom full dynamique
    Par yoda_style dans le forum Flash
    Réponses: 8
    Dernier message: 23/10/2004, 14h11

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