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 :

Gestion d'un fichier image


Sujet :

Delphi

  1. #1
    Membre habitué Avatar de Hamza
    Homme Profil pro
    Data Analyst
    Inscrit en
    Avril 2005
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Algérie

    Informations professionnelles :
    Activité : Data Analyst
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2005
    Messages : 295
    Points : 164
    Points
    164
    Par défaut Gestion d'un fichier image
    Bonsoir,

    Je souhaite développez une application comme celle de windows la visionneuse des image avec toute les option, actuellement je sais comment insérer une image avec l'outil Timage mais comment ajouter les option de zoom je ne trouve pas.
    de plus quand j'insert une image comment je peux garder sa taille réelle ? en utiliser un espace moins (une image de 1024*768 l’insérer dans un espace 800x600)

    Merci a vous.

  2. #2
    Membre à l'essai
    Femme Profil pro
    Dev
    Inscrit en
    Mars 2014
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Dev
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2014
    Messages : 26
    Points : 17
    Points
    17
    Par défaut
    sur ton TImage, mets la propriété stretch a true pour adapter sa taille.

    Maintenant pour implémenter un zoom complet, c' est pas auusi simple .. une idée est de mettre ton Timage dans une srollbox et de changer la taille de ton TImage via du code. (heigth et width ..)

  3. #3
    Membre actif Avatar de Basile le disciple
    Homme Profil pro
    étudiant Centrale Supélec
    Inscrit en
    Avril 2013
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : étudiant Centrale Supélec

    Informations forums :
    Inscription : Avril 2013
    Messages : 147
    Points : 279
    Points
    279
    Par défaut
    Bonjour à tous,

    Vous pourriez tout simplement utiliser StretchDraw qui dessine un fond dans un rectangle. Pour insérer une image dans un espace plus petit qu'elle, il suffit d'utiliser une scrollBox comme dit bluefish01.

    Voici un bout de code prenant en compte toutes ces remarques :

    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
     
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, ExtDlgs, Menus;
     
    type
      TForm1 = class(TForm)
        PaintBox1: TPaintBox;
        MainMenu1: TMainMenu;
        Ouvrir1: TMenuItem;
        Image1: TImage;
        OpenPictureDialog1: TOpenPictureDialog;
        ScrollBox1: TScrollBox;
        procedure PaintBox1Paint(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
        procedure FormMouseWheelDown(Sender: TObject; Shift: TShiftState;
          MousePos: TPoint; var Handled: Boolean);
        procedure FormMouseWheelUp(Sender: TObject; Shift: TShiftState;
          MousePos: TPoint; var Handled: Boolean);
        procedure Ouvrir1Click(Sender: TObject);
      private
        { Déclarations privées }
        bmp : TBitmap;
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
    const inc : integer = 10;      //incrément de zoom
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      bmp:=TBitmap.Create;
      With bmp do
      begin
        Width:=Paintbox1.ClientWidth;
        Height:=Paintbox1.ClientHeight;
      end;
    end;
     
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
       bmp.Free;
    end;
     
    procedure TForm1.PaintBox1Paint(Sender: TObject);
    begin
      bmp.Width:=Paintbox1.ClientWidth;
      bmp.Height:=Paintbox1.ClientHeight;
     
      With bmp.Canvas do
      begin
        Brush.Color:=clWhite;
        Fillrect(Paintbox1.ClientRect);
        StretchDraw(PaintBox1.ClientRect,Image1.Picture.Bitmap);
      end;
      Paintbox1.Canvas.Draw(0,0,bmp);
    end;
     
    procedure TForm1.Ouvrir1Click(Sender: TObject);   //ouvrir une image
    begin
      if OpenPictureDialog1.Execute then
      begin
        Image1.Picture.Bitmap.LoadFromFile(OpenPictureDialog1.FileName);  //possible que pour une image d'extension .bmp
        Paintbox1.Width:=Image1.Picture.Width;
        Paintbox1.Height:=Image1.Picture.Height;
        Paintbox1.OnPaint(nil);
      end;
    end;
     
    procedure TForm1.FormMouseWheelDown(Sender: TObject; Shift: TShiftState;
      MousePos: TPoint; var Handled: Boolean);
    begin
      Paintbox1.Width:=Paintbox1.Width-inc;
      Paintbox1.Height:=Paintbox1.Height-inc;
      Paintbox1.OnPaint(nil);
    end;
     
    procedure TForm1.FormMouseWheelUp(Sender: TObject; Shift: TShiftState;
      MousePos: TPoint; var Handled: Boolean);
    begin
      Paintbox1.Width:=Paintbox1.Width+inc;
      Paintbox1.Height:=Paintbox1.Height+inc;
      Paintbox1.OnPaint(nil);
    end;
     
    end.
    (la Paintbox est dans une ScrollBox avec left et top à 0)
    Par contre, comme tout se passe dans un bitmap, l'image va avoir les propriétés d'un Bitmap.
    De plus, si vous voulez dessiner, il faudra avoir un deuxième bitmap qui contient l'image en cours de traitement pour pouvoir la redessiner à chaque changement.

  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 263
    Points
    3 263
    Par défaut
    Bonjour,

    Basile : Par contre, comme tout se passe dans un bitmap, l'image va avoir les propriétés d'un Bitmap.
    C'est pas grave et même mieux si tu veux ensuite apporter des modifs au BitMap, et si tu veux charger des fichiers d'un autre format présents sur le disque il suffit de les convertir en BitMap lors du chargement.

    Exemple pour les *.jpg :

    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
    function BMPdeJPEG(const nomFichierJPEG : string): TBitmap; // avec Jpeg dans le Uses
    var      JPEGImage: TJPEGImage;
    begin    Result := Nil;
             if (nomFichierJPEG = '') then EXIT;
             try
                 JPEGImage := TJPEGImage.Create;
                 Result := TBitmap.Create;
                 Result.PixelFormat := pf24Bit;
                 try // test de chargement
                   JPEGImage.LoadFromFile(nomFichierJPEG);
                   JPEGImage.DIBNeeded;
                   Result.Assign(JPEGImage);
                 finally
                   JPEGImage.Free;
                 end;
             except
                 Result := Nil;
             end;
    end; // BMPdeJPEG
    A+.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

Discussions similaires

  1. [WD15] Gestion de fichier :: Image, Document ::
    Par xXLeManXx dans le forum WinDev
    Réponses: 2
    Dernier message: 20/04/2010, 10h38
  2. Réponses: 3
    Dernier message: 27/10/2007, 00h39
  3. Recherche d'un SGBG pour la gestion des fichiers images !
    Par PandaConstantin01 dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 04/09/2006, 13h53
  4. intégrer un fichier image dans une base de donnée?
    Par Lody dans le forum Requêtes
    Réponses: 9
    Dernier message: 16/03/2006, 19h08
  5. Comment lire un fichier image
    Par Charlemagne dans le forum DirectX
    Réponses: 9
    Dernier message: 12/03/2004, 00h22

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