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 :

remplissage de zones de couleur avec scanline


Sujet :

Delphi

  1. #41
    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 : j'ai remarqué que l'on pouvait enregistrer son travail mais je n'ai pas compris comment!
    Lorsque on clique sur "Enregister" dans SavePictureDialog1 ça passe le paramètre "Execute" ci-après à true :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if Execute then begin
          imgResized.Picture.Bitmap.SaveToFile(FileName);
        end;
    et alors l'instruction imgResized.Picture.Bitmap.SaveToFile(FileName) enregistre le BitMap contenu dans le TImage "imgResized" sur le disque sous le nom de FileName.

    Les lignes qui sont au début de la procedure TFrmDemoMain.btnSaveBitmapClick() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    const nf = 'XBR_Redimensionné.bmp';
    var nfc: string;
    begin
        with SavePictureDialog1 do begin
        Filter := 'Fichier *.bmp|*.bmp)';
        if FN = '' then FileName := nf else
        begin
          nfc := extractFileName(FN);
          nfc := ChangeFileExt(nfc, '.bmp');
          FileName := 'Redimensionné_' + nfc;
        end;
    ne sont rien d'autre qu'un tripatouillage pour fixer la valeur de FileName :
    "FN" est le nom du fichier-source chargé, mais c'est une chaîne vide lorsqu'on n'a rien chargé et qu'on veut enregistrer l'agrandissement de l'image-source embarquée par conception et dans ce cas FileName prend la valeur de la constante nf = 'XBR_Redimensionné.bmp'
    .... mais si on a chargé un fichier-image on récupère son nom, on change son extension en BMP et on lui colle le préfixe 'Redimensionné_' avant l'enregistrement.

    et aussi, comment avez-vous réussi à faire progresser la ProgressBar ?
    La routine d'agrandissement XBR est lancée avec l'instruction aBmp := StretchXBR(imgOriginal.Picture.Bitmap, ScaleValue, ProgressBar1.StepIt);

    La fonction qui exécute est déclarée ainsi : function StretchXBR(const BmpS: tBitMap; ScaleFactor: Single; const ProgressCallBack: TObjectProc = nil): tBitMap;

    Et dans la boucle principale de cette fonction un if Assigned(ProgressCallBack) then ProgressCallBack; actionne la méthode StepIt de la ProgressBar1 en avançant sa position de la valeur spécifiée par la propriété Step.

    Et je n'ai pas trop compris la procédure sablier.
    A chaque appel elle change la forme du Screen cursor :
    - s'il vaut crDefault on le bascule à crHourGlass
    - s'il vaut crHourGlass on le bascule à crDefault
    Dans les temps anciens crHourGlass provoquait l'apparition d'un curseur en forme de Sablier mais actuellement ce sablier est remplacé par une petite couronne telle qu'une ProgressBar circulaire.
    Pour des process qui ne durent pas trop longtemps ça remplace une ProgressBar et simplifie le code (on déclenche la procedure Sablier au début et à la fin du process en question) ... et si le process est instantané on n'a pas le temps de voir le changement.

    A+.

    EDIT du 30/05/2013 : Oups, ta question au sujet du fonctionnement de la progressBar m'a donné l'occase de repérer une imperfection : j'avais omis d'ajuster la progression à la taille du BitMap agrandi, mais il suffit d'ajouter les deux lignes en vert ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TFrmDemoMain.bStretchXBRClick(Sender: TObject);
    begin
      edMis.text := ''; edMis.Update; //Sablier;
      ProgressBar1.Max:=trunc(imgOriginal.Picture.Bitmap.Height*ScaleValue);
      ProgressBar1.Step:=10;
      GTC := GetTickCount;
      aBmp := StretchXBR(imgOriginal.Picture.Bitmap, ScaleValue, ProgressBar1.StepIt);
      ... // suite  inchangée
      ...
      ...
    end;
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  2. #42
    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
    Merci pour les réponses, j'ai compris SaveToFile et la procédure sablier mais j'ai quand même un peu plus de mal pour la ProgressBar, je vais essayer de comprendre!

  3. #43
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    Citation Envoyé par Basile le disciple Voir le message
    Merci pour les réponses, j'ai compris SaveToFile et la procédure sablier mais j'ai quand même un peu plus de mal pour la ProgressBar, je vais essayer de comprendre!
    la progressbar a une particularité remarquable, un appel à StepIt force sonr réaffichage

    ceci dit, la fiche reste figée normalement, avec avant(*) Windows 7 (ou Vista je sais pas) la fenêtre devenait blanche quand on passait une autre fenêtre devant, mais W7 garde une image de toutes les fenêtres et sait la réafficher sans invoquer son événement Paint...donc elle est toujours figée mais elle n'est plus blanche

    EDIT: (* je deviens dyslexique du clavier moi)
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  4. #44
    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
    Merci pour ces compléments !

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 726
    Points : 15 127
    Points
    15 127
    Par défaut
    Bonjour,

    Oui, je déterre (ça fera bientôt 6 ans), mais c'est pour la bonne cause :

    Citation Envoyé par Gilbert Geyer Voir le message
    (la version de 2012 est moins bonne en cas d'utilisation d'un fichier *.jpg)
    Elle est même franchement mauvaise,
    Exemples :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    dims fic -> dims dans TImage et TLabel
     564x690 -> 890x838
     769x433 -> 814x489
     599x701 -> 634x791
     680x593 -> 720x669
     640x480 -> 677x542
     600x800 -> 635x903
    Testé sous D7-PE, je n'ai donc pas les sources pour aller voir ce qui se passe en profondeur, alors j'ai suivi le conseil de GG et remplacé une fonction par l'autre, en corrigeant au passage ce détail :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      //img := tImage.Create(pl); //<- petit inconvénient : nécessite un AOwner
      // et on peut ignorer l'[Avertissement] ... La variable 'pl' n'est peut-être pas initialisée
      // ça marche quand-même.
      img := tImage.Create(Application); // jpt : ben yakà prendre la manière de l'ancienne proc
    La fonction en question se trouve là (plus cool avec le lien).

    Au passage, je vous passe une information : l'ouverture de bitmaps ne supporte pas les .bmp dont la version du header est supérieure à 1 (et le message d'erreur de Delphi n'est vraiment pas explicite : division par zéro en virgule flottante). Il faudrait faire un test sur la version du header, qui doit contenir 28 à l'adresse hexa 0E du fichier.bmp.


    Et enfin, si Gilbert passe par là, j'ai une question, à propos d'une ligne trouvée dans le FormCreate :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TFrmDemoMain.FormCreate(Sender: TObject);
    begin
      aBmp := TBitmap.Create;
      imgResized.Picture.Bitmap := aBmp;
      TrackBar1Change(self);
      imgResized.Picture.Bitmap.Canvas.Pixels[0, 0] := imgResized.Picture.Bitmap.Canvas.Pixels[0, 0];
    À quoi peut bien servir cette ligne 6 ?
    Commentée ou pas, je ne vois pas de différence.
    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

  6. #46
    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 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    Bonjour Jean-pierre, je pense que ça sert après redimensionnement, donc éventuelle modification, à refixer la couleur du pixel pris comme définissant la couleur de transparence éventuelle à la valeur de l'image originale.
    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 !

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 726
    Points : 15 127
    Points
    15 127
    Par défaut
    Coucou, Yves,

    Citation Envoyé par tourlourou Voir le message
    Bonjour Jean-pierre, je pense que ça sert après redimensionnement, donc éventuelle modification, à refixer la couleur du pixel pris comme définissant la couleur de transparence éventuelle à la valeur de l'image originale.
    dans le FormCreate ?
    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

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 3 PremièrePremière 123

Discussions similaires

  1. [AC-97] Zone de Liste avec couleur sur les lignes
    Par Dewey12 dans le forum IHM
    Réponses: 3
    Dernier message: 07/10/2011, 16h42
  2. Réponses: 2
    Dernier message: 23/10/2009, 11h55
  3. zone de liste avec aperçu couleur
    Par estebandelago dans le forum IHM
    Réponses: 4
    Dernier message: 08/06/2007, 15h16
  4. Zone de liste avec 2 couleurs differentes
    Par uloaccess dans le forum Access
    Réponses: 2
    Dernier message: 02/11/2005, 17h10
  5. pb couleur avec Scanline
    Par bobymaw dans le forum C++Builder
    Réponses: 6
    Dernier message: 10/05/2004, 22h25

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