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

Lazarus Pascal Discussion :

Travailler avec TBitmap et des fichiers bmp sous Linux [Lazarus]


Sujet :

Lazarus Pascal

  1. #121
    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 132
    Points
    15 132
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Il me reste :
    - à faire le ménage (vous verriez l'état des unités, laisse tomber...)
    - à tester les autres manières de resampler (oui, l'unité trouvée en comporte 3 ou 4)
    - à tester la tienne,
    - et quand tout ça sera rutilant, à proposer ici un projet un peu comme les gars de Delphi ont fait en leur temps.
    - et enfin, à étudier et mettre en place leur autre projet, qui utilise une manière de resampling un poil différente et dont les premiers tests sous D7 m'avaient agréablement surpris.
    Il me reste :
    - à faire le ménage (vous verriez l'état des unités, laisse tomber...)
    - à tester les autres manières de resampler (oui, l'unité trouvée en comporte 3 ou 4)
    - à tester la tienne,
    - et quand tout ça sera rutilant, à proposer ici un projet un peu comme les gars de Delphi ont fait en leur temps.
    - et enfin, à étudier et mettre en place leur autre projet, qui utilise une manière de resampling un poil différente et dont les premiers tests sous D7 m'avaient agréablement surpris.

    Pas la peine de tester la tienne, c'est pratiquement la même qu'une que j'ai déjà (impression que les codeurs se copient les uns les autres, un peu comme les fake news sur les réseaux sociaux, )

    Jolie liste à laquelle il va falloir que je rajoute un item car, si le projet de base tourne, il tourne en cahotant.
    Bon, oui, je suis un chercheur de petites bêtes et j'agrandis mes résultats et c'est là que je constate des défauts, et même carrément des modifications de tailles !

    Donc ce gif est construit à partir de 4 copies d'écran qui, elles, ont été agrandies pour bien voir le défaut, et par exemple le mode StretchBmpAlpha3 fait perdre une ligne en bas et une colonne à droite...
    Et moi, ça, ça ne me va pas,

    Nom : compar_résultatsx2.gif
Affichages : 341
Taille : 82,0 Ko

    Donc il me reste :
    - à faire le ménage (vous verriez l'état des unités, laisse tomber...)
    - à tester les autres manières de resampler (oui, l'unité trouvée en comporte 3 ou 4)
    - à tester la tienne,
    - à corriger la géométrie des résultats obtenus, ce qui risque être tendu...
    - et quand tout ça sera rutilant, à proposer ici un projet un peu comme les gars de Delphi ont fait en leur temps.
    - et enfin, à étudier et mettre en place leur autre projet, qui utilise une manière de resampling un poil différente et dont les premiers tests sous D7 m'avaient agréablement surpris.
    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

  2. #122
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Salut
    Citation Envoyé par Jipété Voir le message
    Bonjour !


    Et avec tes compos au milieu (merci pour l'autre code, vais quand même l'étudier)

    Il me reste :
    ...
    - à tester les autres manières de resampler (oui, l'unité trouvée en comporte 3 ou 4)
    ...


    Mais tu es le Père Noël ! Il y a de tout dans ta hotte, y a qu'à demander !
    Tu en veux d'autres dans le genre ? (j'en ai même un unique)

    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
      { TBZResampleFilterMethod : }
      TBZResampleFilterMethod =( rfmBox,
                                 rfmTriangle,
                                 rfmCosine,
                                 //FIR (Finite impulse Response) Filters
                                 rfmSpline,
                                 rfmCatrom,
                                 rfmCubic, rfmQuadratic,
                                 rfmBell,
                                 rfmHermit, rfmWelch,//imCubicSharpened,
                                 rfmMitchell, rfmHann, rfmHamming,
                                 rfmSinsh, rfmBlackman,
                                 rfmLagrange,
                                 // IIR (Infinite impulse Response) Filters
                                 rfmBlackmanBessel, rfmBlackmanSinC,
                                 rfmGaussian,
                                 //Windowed Sinc/Jinc Filters
                                 rfmSinc, rfmJinc, //NB Jinc aussi appelé Bessel
     
                                 // Méthode rapide
                                 //imSinCFast
                                 //imLanczosSharpened,
                                 //imLanczos2,
                                 //imLanczos2Sharpened,
                                 rfmBartlett,
                                 rfmCosineWindowed,
                                 rfmWelchWindowed,
                                 rfmHannWindowed,
                                 rfmHammingWindowed,
                                 rfmBlackmanWindowed,
                                 rfmGaussianWindowed,
                                 rfmLanczos3,
                                 //imParzen,
                                 rfmBohman,
                                 rfmAlbrecht,
                                 rfmKaiser,
                                 rfmBeanz
                                 );
    + Procedure TBZBitmapTransformations.ReSample(Var NewWidth, NewHeight: Integer; ResampleMode: TBZResampleFilterMethod; Const KeepRatio: Boolean = False);
    + Procedure TBZBitmapTransformations.DownSample(Const Factor: Integer);
    + Procedure TBZBitmapTransformations.StretchSmart(Var NW, NH: Integer; Const RayLength: Byte = 2; Const KeepRatio: Boolean = False);
    Mais bon l'ensemble de ces source de "resampling" est plus gros que l'unité uFastBitmap" et "uBmpImageLoader" mis ensemble

    Sinon pour le fun un petit algo sur lequel on avait déja discuté

    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
     
    { Modifié, adpapté et optimisé depuis : http://delphi-kb.blogspot.ch/2011/05/resize-tbitmap-quickly.html
      --> "This is a modification of Answer 4 and is about three times faster:"
      ==> Stretch Bilineaire
    }
    Procedure TFastBitmap.StretchSmooth(Var NW, NH: Integer; Const KeepRatio: Boolean = False);
    Var
      TmpBmp:   TFastBitmap;
      SrcW, SrcH, X, Y, ix, iy: Integer;
      Dx, Dy:   Single;
      uvx, uvy: Integer;
     
      sfrom_y, sfrom_x: Single;
      ifrom_y, ifrom_x: Integer;
     
      weight_x, weight_y:     Array[0..1] Of Single;
      weight, tr, tg, tb, ta: Single;
     
      DstPtr, SrcPtr: PColor32;
      AColor: TColor32;
    Begin
      SrcW := Self.Width;
      SrcH := Self.Height;
     
      If KeepRatio Then KeepAspectRatio(SrcW, SrcH, NW, NH);
     
      If (NW = SrcW) And (NH = SrcH) Then exit;
     
      TmpBmp := TFastBitmap.Create(NW, NH);
     
      Dx := 1 / (NW / SrcW);
      Dy := 1 / (NH / SrcH);
     
      uvx := 0;
      uvy := 0;
      sFrom_y := Dy;
      sFrom_x := Dx;
     
      For Y := 0 To TmpBmp.Height-1 Do
      Begin
        sfrom_y := Y * Dy;
        ifrom_y := Trunc(sfrom_y);
        // Calcul du poid en y
        weight_y[1] := sfrom_y - ifrom_y;
        weight_y[0] := 1 - weight_y[1];
        DstPtr := TmpBmp.GetScanLine(Y);
        For X := 0 To TmpBmp.Width-1 Do
        Begin
          sfrom_x := X * Dx;
          ifrom_x := Trunc(sfrom_x);
          // Calcul du poid en x
          weight_x[1] := sfrom_x - ifrom_x;
          weight_x[0] := 1 - weight_x[1];
          tr := 0.0;
          tg := 0.0;
          tb := 0.0;
          ta := 0.0;
          // rééchantillonnage rapide. On prend un carre de 2x2
          For ix := 0 To 1 Do
          Begin
            For iy := 0 To 1 Do
            Begin
              uvy := (ifrom_y + iy);
              If uvy > Pred(Self.Height) Then uvy := Pred(Self.Height);
              SrcPtr := Self.GetScanLine(uvy);
              uvx := (ifrom_x + ix);
              If uvx > pred(Self.Width) Then uvx := Pred(Self.Width);
              If uvx > 0 Then Inc(SrcPtr, uvx);
              AColor := SrcPtr^;
              weight := weight_x[ix] * weight_y[iy];
              tr := tr + AColor.Red * weight;
              tg := tg + AColor.Green * weight;
              tb := tb + AColor.Blue * weight;
              ta := ta + AColor.Alpha * weight;
            End;
          End;
          DstPtr^.Create(Round(tr), Round(tg), Round(tb), Round(ta));
          Inc(DstPtr);
        End;
      End;
      Self.Assign(TmpBmp);
      FreeAndNil(TmpBmp);
    End;


    Citation Envoyé par Jipété Voir le message
    - et enfin, à étudier et mettre en place leur autre projet, qui utilise une manière de resampling un poil différente et dont les premiers tests sous D7 m'avaient agréablement surpris.
    On peux les trouver ou ces sources ?

    Citation Envoyé par Jipété Voir le message
    Tiens, d'ailleurs, pourquoi n'ai-je pas trouvé dans tes compos le couple célèbre aBmp.BeginUpdate / EndUpdate ? Il me semble avoir lu récemment que ces deux-là sont utiles pour prévenir un éventuel refresh en cours de traitement et donc mal venu.
    Cela serait utile effectivement dans le cas de processus avec des threads. Ce n'est pas compliqué à mettre en place il faut juste un boolean et en options un "compteur de références". (Je l'ai fais dans mon gros projet)

    Citation Envoyé par Jipété Voir le message
    Jérôme, merci pour ta patience, hélas je ne dois pas être bien réveillé ce matin car je n'ai rien compris à ton explication du milieu de la nuit :

    D'où l'importance capitale des bons mots !
    Pas de soucis "no problemo" !
    D'accord avec toi pour le choix des mots mais pas évident des fois.

    Citation Envoyé par Jipété Voir le message
    Qu'est-ce que ça aurait changé ? Si le FastBitmap est readonly il le reste, de n'importe où et n'importe comment qu'on l'appelle, non ?
    Sauf que pour moi, vu d'ici, il ne l'est pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            pColDst^ := pColSrc^; // là j'écris les données de la source dans la destination !
    Ces pColXXX sont des pointeurs sur le début des zones XXXbmp.FastBitmap, donc j'y écris (XXX pour src ou dst).
    Remplaces par exemple la propriété FastBitmap par un boolean. resultat tu ne pourras pas changer sa valeur.
    Le fait est que la propriété "FastBitmap" est une classe on a donc accès à ces propriétés et ces fonctions, a contrario d'un boolean ou autre types (integer, byte...).


    J'avais préparé ça, ce matin, avant d'attaquer, je te le copie/colle tel quel :
    Tiens, je reviens deux secondes sur ces histoires de sémantique et autres bonnes utilisations des bons mots, j'y ai repensé hier soir ça m'a aidé à m'endormir.

    Citation Envoyé par Jipété Voir le message
    Un truc pour lequel j'ai systématiquement besoin de l'aide de l'infobulle, c'est aBmp.Assign( source ou destination ?
    Et ça fait 20 ans que ça dure.
    Alors que aBmp.LoadFromFile ne présente aucune ambiguité, grâce au "From".
    Avec Assign c'est toujours Dest.Assign(Source). C'est la convention.

    Citation Envoyé par Jipété Voir le message
    Et quand on regarde les compos de Mitchell, on découvre un truc fort bien sympathique dans lclCompImages.pas, c'est object.DrawTo(. Toute la différence et tout le bonheur c'est ce "To" : trop fastoche d'écrire object.DrawTo(cible), pas besoin de réfléchir, c'est tellement évident.
    J'ai même été plus loin en nommant une des fonction "DrawToCanvas" dans mon projet. Après ce qui manque souvent se sont des commentaires dans l'interface au-dessus de chaque méthode pour que cette aide soit visible à la complétion.

    Citation Envoyé par Jipété Voir le message
    Par contre leur histoire de object.Clear(une_couleur); je trouve ça insensé !
    Surtout en se souvenant que si je veux vider les lignes de mon mémo, c'est monmemo.Lines.Clear; sans paramètres.
    Tu vois l'embrouille ? Un même mot sous-entendant une même action, mais non...

    Et c'est tous ces petits détails qui font que le code coule tout seul ou qu'on misère sur des pertes de temps qui ne devraient pas avoir lieu.
    Je suis d'accord. Dans la plus part des système de gestion bitmap pour remplir l'image avec une couleur ils passent par "Canvas.Brush --> FillRect" mais cette façon de faire est souvent non optimisée.

    A ton avis renommer "clear" par "FillColor", (je suis pas pour setcolor comme je te l'ai expliqué, du a comment on code les composants et classes avec les propriétés) ou sinon "SetBackgroundColor", ou "Erase"/"EraseWithColor", à la limite à ton avis ?

    Citation Envoyé par Jipété Voir le message
    Bonne journée, allez, moi je sors le balai,
    Idem, allez encore une heure à me "reposer" un peu et je repart

    A+
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  3. #123
    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 132
    Points
    15 132
    Par défaut
    Citation Envoyé par BeanzMaster Voir le message
    Tu en veux d'autres dans le genre ? (j'en ai même un unique)

    Mais bon l'ensemble de ces source de "resampling" est plus gros que l'unité uFastBitmap" et "uBmpImageLoader" mis ensemble
    Attends attends, j'ai pas encore fini de vider la camionnette que déjà tu veux la remplir à nouveau ?

    Merci pour les autres filtres (sur lesquels j'avais déjà travaillé il y a qq temps [juillet 2017], tu te souviens ? :
    Nom : resampling.png
Affichages : 273
Taille : 447,8 Ko),
    mais ce qui m'intéresse dans le projet en cours, c'est que j'ai accès à tous les paramètres, même si pour le moment je ne sais pas à quoi ils servent.
    Mais au moins, je peux jouer à comprendre, à coups de modifs par ci par là.


    Citation Envoyé par BeanzMaster Voir le message
    On peux les trouver où, ces sources ?
    Là pour le premier projet (en cours, plein de bicubic), et l'autre ensuite.


    Citation Envoyé par BeanzMaster Voir le message
    J'ai même été plus loin en nommant une des fonction "DrawToCanvas" dans mon projet.



    Citation Envoyé par BeanzMaster Voir le message
    A ton avis renommer "clear" par "FillColor", (je suis pas pour setcolor comme je te l'ai expliqué, du a comment on code les composants et classes avec les propriétés) ou sinon "SetBackgroundColor", ou "Erase"/"EraseWithColor", à la limite à ton avis ?
    De ce que j'ai expérimenté, je dirais SetBackgroundColor.
    EraseWithColor, je trouve ça ambigü.

    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

  4. #124
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 419
    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 419
    Points : 5 818
    Points
    5 818
    Par défaut
    Salut

    fillColor
    ... tu remplit bien toutes ta zone par une couleur

    ce ne serait pas plutôt DrawOnCanvas ... Dessiner sur le canevas

    je dis ça je dis rien
    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

  5. #125
    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 132
    Points
    15 132
    Par défaut
    Citation Envoyé par BeanzMaster Voir le message
    On peut les trouver où, ces sources ?
    EDIT
    Je me suis fait suer (pour rester poli) avec le second projet, une horreur rien que pour l'ihm, l'enfer, alors cadeau : (la fiche et son code)
    Voir cette nouvelle discussion
    /EDIT

    Astuces :
    il y a des trucs en commentaires, taggés "jpt"
    Lazarus connaît le Notebook mais celui-ci ne fonctionne pas comme Delphi, on dirait
    Et tous les caractères accentués m'ont fait passer un temps dément
    J'ai viré ce qui était en rapport avec le gif, sinon j'y serais encore, à essayer d'adapter.

    Pour le moment ça ne fonctionne pas, mais je n'ai pas regardé le code métier.

    Et le truc dommage c'est que Gilbert nous donne un lien vers des infos (honnêtement, je n'ai rien compris à ses explications sur la page d'aide), mais mort, comme bien souvent,
    Saleté d'internet !

    Bon, tu devrais arriver à ça, et en haut à droite le petit livre vers une page d'aide (avec infobulles et images qui s'agrandissent au survol).

    Nom : xbr.png
Affichages : 257
Taille : 34,3 Ko
    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. #126
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Salut ca à l'air sympa mais cela serai encore mieux avec le lpr et toutes les units dans le zip pour pouvoir compiler et tester le bouzin
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  7. #127
    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 132
    Points
    15 132
    Par défaut
    Citation Envoyé par BeanzMaster Voir le message
    [...] mais cela serait encore mieux avec le lpr et toutes les units dans le zip pour pouvoir compiler et tester le bouzin
    EDIT
    Ben je n'y ai pas pensé une seule seconde pour la bonne et simple raison que j'imaginais que tu avais récupéré les sources complètes tel qu'indiqué ici
    Voir la nouvelle discussion
    /EDIT
    et qu'ensuite tu avais fait tourner l'outil de conversion qui, peut-être en 2.0 s'en sortira mieux que mon vieux 1.4, mais comme rien n'est moins sûr, j'ai posté un simple complément.

    Un peu comme à l'époque heureuse et bénie du Meccano où, minot, tu "touchais" à Noël une boîte version n qui te permettait de faire plein de trucs, et aux étrennes du Nouvel An, avec de la chance, tu gagnais la boîte complémentaire n-A qui rajoutait des pièces à celles que tu avais déjà, ouvrant la porte à de nouveaux modèles.

    Citation Envoyé par BeanzMaster Voir le message
    Salut ça a l'air sympa [...]
    C'est ce qu'il m'a semblé après un ou deux essais ultra-rapides.

    Bon, faut que je comprenne d'où viennent mes décalages dans "bicubics" (appelons-le comme ça) :
    Nom : tailles_diff.gif
Affichages : 279
Taille : 16,9 Ko
    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

  8. #128
    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 132
    Points
    15 132
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Bon, faut que je comprenne d'où viennent mes décalages dans "bicubics" (appelons-le comme ça)
    Le problème est dans StretchbmpAlpha3 : la dernière ligne qu'on voit (la 1re dans le fichier, donc) et la dernière colonne sont remplies de pixels transparents !

    Le viewer Linux a du mal avec cette ligne, qui s'affiche en noir, mais l'éditeur hexa ne pardonne pas :

    Nom : lignes_noires_alpha3.png
Affichages : 256
Taille : 34,6 Ko

    D'ailleurs, le tout dernier pixel du fichier (dernière colonne donc) est à 00 00 00 00 et c'est du pf32.
    Une vision bien zoomée avec Gimp :

    Nom : ligne_et_col_transp.png
Affichages : 258
Taille : 2,7 Ko

    D'où celà vient-il ? C'est une bonne question à laquelle je cherche une réponse et là, le vaudou refait surface...

    L'image étant parcourue comme toutes les autres images du monde par une double boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for y := 0 to largeur-1 do
      for x := 0 to largeur-1 do begin
        // ici un tas de trucs propres à ce qu'on veut
      end;
    je me suis contenté, dans un premier temps, d'examiner les choses en mettant du log dans le cœur de la boucle et déjà, une info sur 4 est fausse :

    Nom : 1er_résultat.png
Affichages : 251
Taille : 10,8 Ko

    Voilà mon système de log :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    with FrmDemoMain.Memo2.Lines do
      if ((yr = 0) or (yr = hr_moins_un)) and ((xr = 0) or (xr = wr_moins_un)) then 
      begin
        Add(its(yr)+'--'+its(xr));
        Add(its(PRGBQuad(scanTR)^.rgbBlue));
        Add(its(PRGBQuad(scanTR)^.rgbGreen));
        Add(its(PRGBQuad(scanTR)^.rgbRed));
        Add(its(PRGBQuad(scanTR)^.rgbReserved));
        Add('');
      end;
    Comment est-il possible qu'un pavé pourpre soit généré par une couleur orange ?


    Cadeau : function its(i:integer):string; begin result:=IntToStr(i); end; Qu'est-ce que ça va + vite de taper its plutôt que inttostr ! 3 contre 8, y a pas photo !
    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. #129
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Jipété Voir le message
    EDIT
    Ben je n'y ai pas pensé une seule seconde pour la bonne et simple raison que j'imaginais que tu avais récupéré les sources complètes tel qu'indiqué ici [
    /EDIT
    et qu'ensuite tu avais fait tourner l'outil de conversion qui, peut-être en 2.0 s'en sortira mieux que mon vieux 1.4, mais comme rien n'est moins sûr, j'ai posté un simple complément.

    Un peu comme à l'époque heureuse et bénie du Meccano où, minot, tu "touchais" à Noël une boîte version n qui te permettait de faire plein de trucs, et aux étrennes du Nouvel An, avec de la chance, tu gagnais la boîte complémentaire n-A qui rajoutait des pièces à celles que tu avais déjà, ouvrant la porte à de nouveaux modèles.
    Hello, en fait vu que je fais un remplacement d'un mois ou deux et que c'est disons, plus un audit genre "Cauchemar en cuisine" ! J'en ai plein la tête, les jambes et les bras ! Tu vois un peu le truc ? . Je n'ai donc pas (plus) beaucoup de temps libre, et je vais en avoir encore moins dans les semaines à venir. On m'a fait une proposition pour un gros projet professionnel (création d'une société) à mettre en place et tout le tointoin.
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  10. #130
    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 132
    Points
    15 132
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Comment est-il possible qu'un pavé pourpre soit généré par une couleur orange ?
    Simplement avec une boucle qui ne va pas assez loin...
    D'habitude on va trop loin et ça se solde par des AV, "index de liste hors limites", etc., ben là c'est l'inverse, j'en ai une qui est comme ça, classique, for truc < machin do do alors qu'il faut for truc <= machin do, hé oui !
    Par rapport à mon post précédent plein de "00" au début des datas, avec cette modif j'ai de bonnes valeurs, ah mais !

    Seulement, maintenant, ça se répercute sur le rendu des couleurs des dernières ligne et colonne (encore !), et ça va être tendu tendu pour trifouiller, d'autant plus que les variables ont des noms tellement barbares que je n'ai toujours pas compris comment tout ça fonctionne -- l'histoire des carrés 2x2 dans les codes d'interpolation, ça parle à quelqu'un ?
    Si "oui", je peux fournir la proc, 150 lignes environ avec mes résultats de test compris, donc irl ça fait moins
    Cette proc n'ayant pas encore été basculée sur le compo de Jérôme, c'est du Pascal/Delphi/Lazarus pur et dur.


    Citation Envoyé par BeanzMaster Voir le message
    On m'a fait une proposition pour un gros projet professionnel (création d'une société) à mettre en place et tout le tointoin.
    Carrément !
    Courage et bonne chance,
    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

  11. #131
    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 132
    Points
    15 132
    Par défaut
    Bonsoir,
    Citation Envoyé par Jipété Voir le message
    Soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure bidon;
    var
      col: TColor32;
    begin
      col.red := 0;
    end;
    et après une compilation, en face de col.red j'ai un petit triangle jaune et la souris dessus me dit que local variable "col" does not seem to be initialized et la question est donc : comment initialiser "col" ?
    Trouvé.
    Par hasard, et encore un truc de guedin :

    Soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var
      tCol: TColor32;
    begin
      tCol.Red := 0;
    j'ai donc le triangle "pas content" devant la ligne 4.
    Je fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var
      tCol: TColor32;
    begin
      tCol.AsInteger := 0; // +1 !
      tCol.Red := 0;
    et bye bye le triangle !

    Jérôme, à l'occasion, tu rajouteras
    ligne 1785 de uBMPViewer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      DstColor.AsInteger := 0; // jpt, happy compilo
    ligne 422 de uFastBitmap :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Result.AsInteger := 0; // jpt, happy compilo
    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

  12. #132
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Salut,
    Citation Envoyé par Jipété Voir le message
    Bonsoir,
    Trouvé.
    Par hasard, et encore un truc de guedin :

    Soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var
      tCol: TColor32;
    begin
      tCol.Red := 0;
    j'ai donc le triangle "pas content" devant la ligne 4.
    Je fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var
      tCol: TColor32;
    begin
      tCol.AsInteger := 0; // +1 !
      tCol.Red := 0;
    et bye bye le triangle !
    Alors il n'y a aucun intérêt de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      tCol.AsInteger := 0; // +1 !
      tCol.Red := 0;

    Avec tCol.AsInteger := 0; tous les composants RGBA vallent zero donc inutile de rajouté tCol.Red := 0; ca ne rime çà rien. tCol.AsInteger := 0; est identique à tCol := clrTransparent;Et comme je te l'ai dis ce "WARNING" il faut pas la peine ce prendre la tête avec. un simple {%H-} devant la variable et hop tu ne verras plus ce message s'afficher.

    C'est comme avec la variable J ci-dessous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Var
      i,j : integer
    begin
      for i:=0 to 9 do
      begin
        j := j + i;
      end;
    end;
    Le compilo te renverra le même avertissement sur la variable J.

    Le faitt d'utiliser tCol.AsInteger définit toutes les valeurs des membre de TColor32 soit RGBA en une seule ligne, du coup, ok pour le compilo.
    Lorque que tu fais juste tCol.Red := 0; l'avertissement est un peu normal, car dans ce cas tu changes qu'un seul membre (les autres ne sont pas initialisés pour le compilo, et tcol n'a pas été utilisé avant, du coup le compilo génère un avertissement)

    Citation Envoyé par Jipété Voir le message
    Jérôme, à l'occasion, tu rajouteras
    ligne 1785 de uBMPViewer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      DstColor.AsInteger := 0; // jpt, happy compilo
    ligne 422 de uFastBitmap :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Result.AsInteger := 0; // jpt, happy compilo
    Pour les numéros de lignes dans les units ont n'as pas les mêmes, j'ai fait quelques changements; Donnes moi juste le nom des fonctions ou procedures ou tu as effectué ces changements. De mon coté le compilo me renvoie aucun avertissement sur le sujet.

    Dans l'unit uFastbitmap
    ligne 422 j'ai ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      function GetBitFieldValue(Const Value : LongWord; Mask:LongWord; BitShift, BitSize : Byte):Byte; inline;//; DeltaShift:Integer;const IsAlphaMask:Boolean=false): Byte; inline;
      var //--> 422
    et dans l'unit uBMPViewer
    ligne 1785 j'ai ça
    procedure TBMPImageLoader.LoadFromMemory();
    var
    ....
    SrcColorRGB24: TColorRGB24; //---> 1785

    A+
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  13. #133
    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 132
    Points
    15 132
    Par défaut
    Citation Envoyé par BeanzMaster Voir le message
    Alors il n'y a aucun intérêt de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      tCol.AsInteger := 0; // +1 !
      tCol.Red := 0;
    Je sais bien !
    C'était juste pour montrer que le triangle disparaissait sur la ligne tCol.Red.

    Citation Envoyé par BeanzMaster Voir le message
    Pour les numéros de lignes dans les units ont n'as pas les mêmes, j'ai fait quelques changements; Donne-moi juste le nom des fonctions ou procédures où tu as effectué ces changements.
    Voili voilou. Dans uBMPViewer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TBMPImageLoader.LoadFromMemory();
    Var
      ...
    Begin
      DstColor.AsInteger := 0; // jpt, happy compilo
      IsOpaque := True;
      ...
    et dans uFastBitmap :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function ConvertBitFieldsToColor32(Const aBitFields : TColorBitFields; SrcColor : Integer):TColor32;
    ...
    begin
      Result.AsInteger := 0;
    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

  14. #134
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Salut
    Citation Envoyé par Jipété Voir le message
    Je sais bien !
    C'était juste pour montrer que le triangle disparaissait sur la ligne tCol.Red.
    Je me disais aussi, mais pourquoi il fait ca ????

    Citation Envoyé par Jipété Voir le message
    Voili voilou. Dans uBMPViewer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TBMPImageLoader.LoadFromMemory();
    Var
      ...
    Begin
      DstColor.AsInteger := 0; // jpt, happy compilo
      IsOpaque := True;
      ...
    et dans uFastBitmap :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function ConvertBitFieldsToColor32(Const aBitFields : TColorBitFields; SrcColor : Integer):TColor32;
    ...
    begin
      Result.AsInteger := 0;
    Bien vu pour ces lignes, 1 sur 2 dans convertBitField j'avais déja effectué le changement
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  15. #135
    Membre éprouvé Avatar de der§en
    Homme Profil pro
    Chambord
    Inscrit en
    Septembre 2005
    Messages
    765
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Chambord
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2005
    Messages : 765
    Points : 960
    Points
    960
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Et le truc dommage c'est que Gilbert nous donne un lien vers des infos (honnêtement, je n'ai rien compris à ses explications sur la page d'aide), mais mort, comme bien souvent,
    Saleté d'internet !
    Alors-la, rien de plus simple pour retrouver tout le contenu des liens mort: archive.org

  16. #136
    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 132
    Points
    15 132
    Par défaut
    Citation Envoyé par der§en Voir le message
    Alors-la, rien de plus simple pour retrouver tout le contenu des liens mort: archive.org
    Première chose que j'ai tentée, mais ça fonctionne assez mal avec les forums, surtout ceux qui ont eu parfois des soucis (quand on google son nom, on a des remontées "machin is back online!"), et j'ai remarqué récemment qu'un site avait été archivé sans aucune image.
    Quand il s'agit de graphiques, c'est moyen...

    Mais bon, je prends les choses avec philosophie : si ça ne le fait pas, c'est que ça ne doit pas le faire, et voilà.

    Merci quand même du tuyau, c'est un site qui va avoir besoin de beaucoup de stockage dans les années les siècles les millénaires à venir, car c'est (pour moi) une vraie calamité, ce http 404.
    Entre ceux qui ne payent plus l'hébergeur, les hébergeurs qui mettent la clé sous la porte et les webmasters qui réorganisent le site histoire de relooker le truc, on perd tout, petit à petit...
    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

  17. #137
    Membre éprouvé Avatar de der§en
    Homme Profil pro
    Chambord
    Inscrit en
    Septembre 2005
    Messages
    765
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Chambord
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2005
    Messages : 765
    Points : 960
    Points
    960
    Par défaut
    Je plussoie, il y a beaucoup de code est de travail sous Delphi / Lazarus de perdu avec le temps et grâce à se site, je retrouve quelques pépites

  18. #138
    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 132
    Points
    15 132
    Par défaut
    Yop !
    Citation Envoyé par BeanzMaster Voir le message
    Fallait le dire que tu voulais du bicubic !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Begin
      SrcW := Self.Width;
      SrcH := self.Height;
     
              AColor := Self.getPixel(ii, jj);
     
      self.Assign(TmpBmp);
    End;
    Je n'ai pas testé en l'état, cette routine provient de mon projet, mais vu que la base est très similaire ça devrait rouler. Elle te sera peut-être utile par rapport a ton code Delphi
    Ben en fait je n'y comprends rien, car sortie de son contexte, je ne sais pas avec quoi travaille ta routine.
    Je n'ai gardé que la partie qui me pose problème, ce "Self" qui a l'air de désigner en haut et au milieu la source, et en bas la destination

    Largué, le jipé, là...
    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

  19. #139
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    Le Self est un pointeur virtuel qui sert à désigner l'objet en question sur lequel s'exécute la méthode. C'est généralement comme ça qu'il est utilisé.
    Par exemple dans :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TMyImage.Create(Label: String);
    begin
      inherited Create;
      Self.Label := Label;
    end;
    La ligne assigne la valeur du paramètre Label passé dans l'appel de la fonction, à l'attribut Label de l'objet TMyImage lors de sa création. Je l'utilise énormément dans ce contexte là, quand il y a potentielle confusion.

    PS: petite aparté, je n'utilise jamais "with ... do" qui est, pour moi, une horreur et une source permanente de "non-clarté", alors que Self en apporte justement car il permet de comprendre clairement sur quel objet porte l'action.
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  20. #140
    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 132
    Points
    15 132
    Par défaut
    Bonjour,

    Citation Envoyé par M.Dlb Voir le message
    Le Self est un pointeur virtuel qui sert à désigner l'objet en question sur lequel s'exécute la méthode. C'est généralement comme ça qu'il est utilisé.
    Voilà le début :
    Procedure TFastBitmap.StretchBicubic(Var NW, NH: Integer; Const KeepRatio: Boolean = False);.

    Donc self fait référence à un objet TFastBitmap, on est bien d'accord.

    Mais tu n'as pas répondu à ce point précis :
    Je n'ai gardé que la partie qui me pose problème, ce "Self" qui a l'air de désigner en haut et au milieu la source, et en bas la destination
    Je remets le bout concerné :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Begin
      SrcW := Self.Width;
      SrcH := self.Height;
     
              AColor := Self.getPixel(ii, jj);
     
      self.Assign(TmpBmp);
    End;
    Ou alors, oui, au début on utilise certaines propriétés de Self pour faire certaines choses à l'aide d'un objet temporaire, qu'on va utiliser ensuite pour mettre à jour Self ?
    Mouais, pourquoi pas... Tu parlais de clarté et d'éviter les confusions, toi ?

    Citation Envoyé par M.Dlb Voir le message
    PS: petit aparté, je n'utilise jamais "with ... do" qui est, pour moi, une horreur et une source permanente de "non-clarté", alors que Self en apporte justement car il permet de comprendre clairement sur quel objet porte l'action.
    Alors à propos du With Do, oui, on peut se faire des nœuds, mais en étant très rigoureux, perso je trouve ça très lisible, genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    With un_objet_avec_un_nom_long.une_main_propriété_au_nom_long_aussi Do 
    begin
      sous_propriété1 := valeur1;
      sous_propriété2 := valeur2;
      sous_propriétén := valeurn;
    end;
    Concis, lisible.
    Avec les noms très longs, tu peux vite te retrouver en dehors de l'écran à droite et faut prévoir un gobelet dessous pour récupérer les caractères qui tombent sinon ça tache le bureau,

    - - -
    Citation Envoyé par Jipété Voir le message
    De ce que j'ai expérimenté, je dirais SetBackgroundColor.
    Je me suis trompé :
    SetBackgroundColor c'est l'associé, le complice, l'acolyte de SetForegroundColor !

    Foreground et Background c'est comme Laurel et Hardy, Tom et Jerry, Truc et Machin, ça fonctionne par paire, c'est un vieux couple.
    Si on trouve l'un on cherche l'autre, c'est inévitable !

    Et en l'espèce, ça ne sert strictement à rien, donc en ce qui me concerne, SetColor porte exactement le nom de ce que ça fait : définir la couleur des pixels de l'objet.
    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 7 sur 10 PremièrePremière ... 345678910 DernièreDernière

Discussions similaires

  1. Déplacer des fichiers Excel sous Windows avec SAS
    Par Antoun dans le forum Outils BI
    Réponses: 6
    Dernier message: 19/11/2009, 17h05
  2. [Vxi] liens avec des fichiers .jpg, bmp, ou gif
    Par chendo dans le forum Designer
    Réponses: 1
    Dernier message: 14/10/2009, 09h48
  3. Gestion des fichiers users sous linux
    Par darkvodka dans le forum C++
    Réponses: 2
    Dernier message: 29/09/2007, 19h04
  4. Créer et utiliser des fichiers excel sous linux
    Par cronos6 dans le forum Zope
    Réponses: 2
    Dernier message: 02/06/2006, 09h14
  5. Lire des fichiers iso sous linux
    Par wodel dans le forum Applications et environnements graphiques
    Réponses: 3
    Dernier message: 28/11/2005, 10h17

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