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 :

Découper une image JPG en plusieurs morceaux depuis le fichier (sans l'afficher au préalable)


Sujet :

Delphi

  1. #1
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2010
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2010
    Messages : 104
    Points : 85
    Points
    85
    Par défaut Découper une image JPG en plusieurs morceaux depuis le fichier (sans l'afficher au préalable)
    Bonjour,
    J'ai un fichier image au format jpg.
    Si je l'affiche, elle est composée de plusieurs images côte à côte.
    J'aimerais pouvoir les extraire toutes par programmation sans avoir à afficher au préalable cette image à l'écran.
    Avez-vous une idée ou lien à m'indiquer ?
    Merci par avance

    Jean-Louis

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 299
    Points
    11 299
    Billets dans le blog
    6
    Par défaut
    Un TPicture permettra de charger l'image sans l'afficher, et tu pourras copier les portions voulues de son BitMap dans des bitmaps.

    Il n'est pas possible de découper le fichier jpg en plusieurs images sans d'abord procéder à son décodage, car un pixel donné est stocké par un nombre de bits qui peut être différent du voisin.
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2010
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2010
    Messages : 104
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par tourlourou Voir le message
    Un TPicture permettra de charger l'image sans l'afficher, et tu pourras copier les portions voulues de son BitMap dans des bitmaps.
    si je fais: Image1.Picture.LoadFromFile( Monfichier ), ça affiche l'image et je peux effectivement en copier une ou plusieurs parties grâce à copyRect.
    Ce que je souhaite, c'est copier une partie de l'image sans être obligé de passer par la phase affichage sur l'écran.
    Est-ce possible ?

    J.Louis

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 133
    Points
    15 133
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Image1.Visible := False;
    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
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 664
    Points : 6 967
    Points
    6 967
    Par défaut
    Citation Envoyé par illuch Voir le message
    si je fais: Image1.Picture.LoadFromFile( Monfichier ), ça affiche l'image et je peux effectivement en copier une ou plusieurs parties grâce à copyRect.
    Ce que je souhaite, c'est copier une partie de l'image sans être obligé de passer par la phase affichage sur l'écran.
    Est-ce possible ?J.Louis
    Oui, en passant par un TPicture et pas un TImage comme te le propose tourlourou.
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  6. #6
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2010
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2010
    Messages : 104
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par Lung Voir le message
    Oui, en passant par un TPicture et pas un TImage comme te le propose tourlourou.
    Merci de vos réponses. Mais je dois rater quelque chose.
    Je n'ai pas de composant TPicture dans ma palette de composants (je travaille avec Rad Studio XE2)
    Je ne vois pas comment utiliser Tpicture autrement qu'avec Image1.Picture.LoadFromFile('MonImage.bmp'), ce qui affichel'image à l'ecran.

    JL

  7. #7
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 299
    Points
    11 299
    Billets dans le blog
    6
    Par défaut
    TPicture
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    uses 
      TGraphics;
    var 
      myPicture: TPicture;
    begin
      myPicture := TPicture.Create;
      try
        myPicture.LoadFromFile('lena.jpg');
        //...
      finally
        myPicture.Free;
      end;
    end;
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  8. #8
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 455
    Points : 24 867
    Points
    24 867
    Par défaut
    TPicture n'est pas un composant mais une classe que l'on peut instancier librement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MyPicture := TPicture.Create();
    MyPicture .LoadFromFile('MonImage.jpg');
    Tu peux aussi utiliser un TBitmap dans lequel tu fais un Draw d'un TJPEGImage, la technique en D7
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  9. #9
    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
    si tu veux pouvoir copier des portions il te faudra passer par un Bitmap.
    Utiliser simplement un TPicture ne suffira pas pour accéder au Canvas puisque le TPicture contiendra un TJPEGImage et non un TBitmap.


    Citation Envoyé par ShaiLeTroll Voir le message
    Tu peux aussi utiliser un TBitmap dans lequel tu fais un Draw d'un TJPEGImage, la technique en D7
    une autre technique D7:
    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
    procedure TForm1.Button3Click(Sender: TObject);
    var
      JPEG: TJPEGImage;
      BMP: TBitmap;
    begin
      JPEG := TJPEGImage.Create;
      try
        JPEG.LoadFromFile('canon2.jpg');
        BMP := TBitmap.Create;
        try
          BMP.Assign(JPEG);   // tout simplement
          Canvas.Draw(0, 0, BMP); // un affichage simple pour voir que ça fonctionne ^^
        finally
          BMP.Free;
        end;
      finally
        JPEG.Free;
      end;
    end;
    j'avais fait une procédure pour charger une partie d'un bitmap(de1 à 32bit) directement depuis le fichier mais
    pour une image JPEG ce code devient inutile en l'état ... mais si ça intéresse quelqu'un dites le moi et je posterais le code ici

    Cordialement,
    @+

Discussions similaires

  1. Réponses: 3
    Dernier message: 25/02/2016, 22h30
  2. [Débutant] découper une image pour faire plusieurs "capteurs"
    Par vanilou dans le forum Interfaces Graphiques
    Réponses: 7
    Dernier message: 06/07/2012, 14h35
  3. Depuis Flash, créer un lien vers une image jpg
    Par guillaumeabxl dans le forum Flash
    Réponses: 1
    Dernier message: 17/07/2008, 12h25
  4. Afficher une image JPG qui se trouve dans une bdd
    Par Harry dans le forum Bases de données
    Réponses: 6
    Dernier message: 27/02/2004, 10h51
  5. Charger et afficher une image jpg avec les mfc
    Par glop - pas glop dans le forum MFC
    Réponses: 3
    Dernier message: 11/02/2004, 18h59

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