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 :

[Windows - Linux] Porter le projet Delphi StretchXBR vers Lazarus


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 132
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 132
    Par défaut [Windows - Linux] Porter le projet Delphi StretchXBR vers Lazarus
    Bonjour,

    je préfère ouvrir une nouvelle discussion pour ce sujet, qui risque d'être passablement tendu et compliqué.

    Car j'ai jeté un coup d'œil rapide à un des modules (uManipBMPV4), et celui-ci est blindé d'utilisations de RGBQuad et autres RGBTriple avec les conversions qui vont bien, mais aussi de conversions pf24 (Windows oblige) vers pf32 pour bosser, je crains ici une grosse consommation d'aspirine et autres anti-dépresseurs,

    Pour commencer je redonne la source, et les modifs que j'ai apportées à la fiche principale et à l'unité de travail également (nouveau zip par rapport à celui d'hier) EDIT : lire dessous

    Mais ATTENTION ! Je constate avec stupéfaction et tristesse, si si !, que toutes les corrections que j'ai apportées hier à la fiche (.lfm) sont complètement en vrac et ignorées ce matin :
    Pourquoi ?
    Une idée pour remettre tout ça d'équerre sans être obligé de tout refaire à la mano ?

    EDIT : j'ai refait, à coups de rechercher / remplacer tout, ça devrait être bon : StretchXBR_new.zip

    Ouvrez les fichiers et cherchez "jpt".

    Ensuite, je crois qu'il faut penser dès à présent à l'utilisation de machins conditionnels genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    {$IFDEF LINUX}
    // actions pour le pingouin
    {$ELSE}
    // actions pour la fenêtre
    {$ENDIF}
    Il faut arriver jusque là :
    Nom : stretchxbr_v2.png
Affichages : 786
Taille : 38,3 Ko

  2. #2
    Membre Expert
    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
    Billets dans le blog
    2
    Par défaut
    Re-Hello ca serait vraiment sympa si tu pourrais nous mettre le projet complet. Vraiment pas le temps et envie de me faire ***** à convertir les units de Delphi, créer un projet insérer ta Form supprimer l'ancienne bref. Un petit Zip All-in-one ne serait pas de refus et désagréable
    • "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. #3
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 132
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 132
    Par défaut
    Citation Envoyé par BeanzMaster Voir le message
    Re-Hello ca serait vraiment sympa si tu pourrais nous mettre le projet complet. Vraiment pas le temps et envie de me faire ***** à convertir les units de Delphi, créer un projet insérer ta Form supprimer l'ancienne bref. Un petit Zip All-in-one ne serait pas de refus et désagréable
    Tes désirs sont des ordres : full_StretchXBRV4.zip

    Mais souviens-toi que j'ai déjà commencé à mettre en commentaires des choses qui empêchent la compil Linux.
    Bref, cherche "jpt", tu verras bien.

    J'ai bien compris ton autre message et donc je suppose que celui-ci ne va pas beaucoup avancer, paniproblem', maintenant, si tu détectes un truc énorme dans une fonction ou procédure ou que sais-je, plutôt que de recréer tout un zip, si tu pouvais poster juste les modifs, histoire de voir facilement ce qui évolue, ça serait bien mieux top !

  4. #4
    Membre Expert
    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
    Billets dans le blog
    2
    Par défaut
    Merci

    Je viens de jeter un oeil vite fait, quel cata ! Pour convertir ce projet en utilisant les TBitmap de Lazarus va falloir être super minutieux. Les fonctions utilisent énormément les pointeurs et certains truc sont incompatibles avec Lazarus dans la façon de faire, mais ce n'est pas insurmontable. En plus il y a des échanges RGB<=>RGBA qui ne servent à rien, mise à part alourdir la compréhension de l'algo. Mieux vaut travailler en RGBA directement. Après quelques changement vite fait. Impossible de tester

    StretchXBR_V4.lpr(18,1) Error: Can't open resource file "H:\BeanzMaster\Documents\Projets\Lazarus\test\XBR\StretchXBR_V4.res"
    J'essayerai de convertir ce XBR via TFastBitmap dès que j'aurais un peu de temps, mais ca risque d'être chaud ce WE, je suis invité Samedi et Dimanche

    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

  5. #5
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 132
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 132
    Par défaut
    Citation Envoyé par BeanzMaster Voir le message
    Impossible de tester
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    StretchXBR_V4.lpr(18,1) Error: Can''t open resource file "StretchXBR_V4.res"
    Ça, c'est un mystère : je n'ai pas mis le .res pour ne pas alourdir le zip car normalement une compil doit le recréer, mais des fois oui et des fois non...
    D'autant plus qu'on trouve souvent des zip sans .res et ça fonctionne.
    Bref... : StretchXBR_V4.res.txt
    Tu enlèveras ".txt".

    Citation Envoyé par BeanzMaster Voir le message
    J'essayerai de convertir ce XBR via TFastBitmap dès que j'aurais un peu de temps, mais ca risque d'être chaud ce WE, je suis invité Samedi et Dimanche
    On n'est pas pressés, ne te prends pas la tête, je pense que je vais avoir suffisamment à faire avec le projet "bicubics" et le défaut de géométrie/couleurs, si tu as autre chose à faire de ta vie, personne ne t'en voudra.

  6. #6
    Membre chevronné Avatar de der§en
    Homme Profil pro
    Bretagne
    Inscrit en
    Septembre 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bretagne
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 064
    Par défaut
    Je vais creuser ton code mais pour un besoin perso un peu détourné de son usage premier

  7. #7
    Membre Expert
    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
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Ça, c'est un mystère : je n'ai pas mis le .res pour ne pas alourdir le zip car normalement une compil doit le recréer, mais des fois oui et des fois non...
    D'autant plus qu'on trouve souvent des zip sans .res et ça fonctionne.
    Bref... : StretchXBR_V4.res.txt
    Tu enlèveras ".txt".


    On n'est pas pressés, ne te prends pas la tête, je pense que je vais avoir suffisamment à faire avec le projet "bicubics" et le défaut de géométrie/couleurs, si tu as autre chose à faire de ta vie, personne ne t'en voudra.
    Salut,

    j'ai résolu le problème du res sans ton fichier merci quand même. En fait il faut aller dans les options du projet ==> Options du projet ==> Application et cocher "utiliser les ressources manifest". Du moins sous Windows et la hop le fichier Res est recréé.

    J'ai donc réussis à compiler le projet. Avec les "Stretchbits" pas de soucis. Par contre avec le XBR je me prend un gros SIGSEGV ici :

    Unité uStretchXBR4
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      procedure SetPixelOut; //paramètres : ixr,iyr: integer; clPixOut: tRGBQuad
      begin
        if (ixr >= 0) and (iyr >= 0) and (ixr < WR) and (iyr < HR) then pixR[iyr, ixr]^ := clPixOut;
      end;
    J'ai modifié vite fait les types des pointers, mais je pensez que l'erreur vient de l'utilisation des type déclarés qui sont des "array"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    type
      tScanYX  = array of array of PRGBAQuad; // Tableau des adresses des pixels
    Je pense qu'il y a un soucis avec les SetLength J'avais lu un topic la dessus sur le forum anglais (faudrais que je le retrouve)

    Et mon dieu que le code des unités uStretchXBR4 et uManipBMPV4 est crade pas d'indentation, pas de retour à la ligne, c'est vraiment désagréable à lire, réutilisation de types similaires local au lieu de global, vraiment pas évident de s'y retrouvé.
    Même si le code est plus ou moins intéressant, il est anarchique dans la façon d'utilisation des pointers pour les échanges avec les TBitmap et c'est un peu bourrin de mon point de vue.

    Sur wiki il y a quelques explications concernant l'algo XBR et ici et des liens vers des sources en C/C++ plutôt intéressant comme le HQx.
    Un algo qui me donne envie est Waifu2x la qualité des images redimensionnée est stupéfiante. Site officiel avec convertisseur en ligne ici

    A+

    [EDIT] Tuto sur l'algo XBR[/EDIT]
    • "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

  8. #8
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 132
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 132
    Par défaut
    Yop !

    2 jours plus tard...

    j'ai réussi à refaire tomber en marche cette usine à gaz (et c'est pas comme ça que j'avais fait la première fois).

    Pour faire court, je vous livre le code de la fonction StretchXBR, avec les commentaires (les miens sont taggés "jpt") pour bien comprendre :

    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
      ScaleFactor := abs(ScaleFactor);
      if ScaleFactor <= 1.0 then begin // Si ScaleFactor <= 1.0 XBR n'apporte rien donc simple réduction de taille rapide avec StretchBlt
        Result := tBitMap.Create;
    //    BmpS.PixelFormat := pf32bit; // jpt : voir commentaires dans initialisations
        Result.Assign(BmpS);
        iKech := round(ScaleFactor);
        goto Achever;
      end else // sinon utilisation du XBR :
        if ScaleFactor >= 8.0 then sKech := Scalefactor
        else sKech := 8.0; // Si ScaleFactor < 8.0 on procède à un XBR avec 8 et qui sera suivi d'un ajustement de taille rapide avec StretchBlt
     
      iKech := round(sKech);
      Initialisations;
     
      for ys := 0 to HS - 1 do begin
    // jpt [comment. fonctionnel pour le forum] ici rien n'a été touché, je l'enlève pour alléger, à reprendre de l'original
        end; // for xs
    //jpt    if ToucheCla(VK_ESCAPE) then EXIT; // ne compile pas : c'est quel uses qui manque ?
        if Assigned(ProgressCallBack) then ProgressCallBack;
      end; // for ys
     
      Achever:
      //jpt if iKech <> ScaleFactor then -- si présent, ne fonctionne plus avec les val entières > 8
      begin // Ajustement de taille si ScaleFactor n'est pas une valeur entière ou s'il est inférieur à 8
        //jpt WR := round(ScaleFactor * bmpS.Width); HR := round(ScaleFactor * bmpS.Height); // + lisible dessous
        WR := round(WS * ScaleFactor); HR := round(HS * ScaleFactor);
     
        tmp:=TBitmap.Create; // jpt, nouveau
        //tmp.PixelFormat := pf32bit;
        tmp.PixelFormat := pf24bit; // +1 !
        tmp.Width := WR; // 2 lignes nécessaires sinon fichier vide
        tmp.Height:= HR;
     
        //jpt inconnu sous Linux GetBrushOrgEx(Result.Canvas.Handle, pt);
        //jpt SetStretchBltMode(Result.Canvas.Handle, HalfTone);
        SetStretchBltMode(tmp.Canvas.Handle, HalfTone);
        //jpt inconnu sous Linux SetBrushOrgEx(Result.Canvas.Handle, pt.x, pt.y, @pt);
     
        //jpt StretchBlt(Result.Canvas.Handle, 0, 0, WR, HR,
        StretchBlt(tmp.Canvas.Handle, 0, 0, WR, HR,
            Result.Canvas.Handle, 0, 0, Result.Width, Result.Height, SRCCOPY);
     
        //jpt    with Result do begin Width := WR; height := HR; end; // commenté car inutile
        Result.Assign(tmp);
        tmp.Free;
      end;
      Result.Canvas.Changed; // jpt +1!
      SetLength(pixS, 0, 0); SetLength(pixR, 0, 0);
    end; // StretchXBR
    Le truc qui tue ! : tous les bitmaps sont en pf32, et pourtant,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        //tmp.PixelFormat := pf32bit;
        tmp.PixelFormat := pf24bit; // +1 !
    Go figure...

    J'ai à peine changé le nom de deux variables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      skech: Single;  // coefficient d'échelle jpt : renommé Kech en sKech (harmonie avec iKech)
      smkech: Single; // moitié du coefficient d'échelle--jpt: mikech à l'origine, idiot
    et en ai rajouté une :
    Les modifs dans initialisations :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        // BitMap-Source
    //    BmpS.PixelFormat := pf32bit;
    // jpt : je commente car sinon, ça détruit l'original d'où génération de fichier vide !
    // et de toute façon c'est déjà en pf32 si bzBmpViewer
    un peu + bas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //        PRGBQuad(pixR[y, x])^.rgbReserved := 0; // ??? jpt
            PRGBQuad(pixR[y, x])^.rgbReserved := 255;
    et toute la partie // Affichage des coeffs : est commentée, je reviendrai dessus + tard.

    J'arrive à ça, c'est pas mal du tout (légèrement réduit),

    Nom : anim_xbr_127-32.gif
Affichages : 217
Taille : 222,0 Ko

    mais je suis à 98 % de réussite, car il reste deux soucis :
    1-) pas d'image si rapport < 1.0, et
    2-)
    - avec 128x64, agrandissement jusqu'à 20 fois (soit 2560x1280) sans pb, en pf24 comme pf32 -- pas allé plus loin.
    - avec 127x63, agrandissement jusqu'à 8.50, et à 8.51, bim (pf24 comme pf32) ! (là, c'est la fenêtre du prog qui est réduite) :

    Nom : anim_8.50-51_127-32.gif
Affichages : 720
Taille : 40,6 Ko

    Bon, ça ira comme ça pour aujourd'hui...

  9. #9
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 132
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 132
    Par défaut
    Bonjour,

    J'ai fait une catastrophe...

    Je ne sais absolument pas ce que j'ai touché hier soir après la génération du gif, toujours est-il que ce matin il m'est impossible de retrouver l'aspect lisse des agrandissements xBR, tout ce que j'ai c'est du moche.
    Et je suis sûr et certain de ne pas avoir touché les unités xBR.

    Les seules choses modifiées après le gif, c'est de la cosmétique, genre passer, dans uFastBitmap, de ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function TColor32.ToFPColor: TFPColor;
    begin
      Result.Red := Self.Red shl 8 + Self.Red;
      Result.Green := Self.Green shl 8 + Self.Green;
      Result.Blue := Self.Blue shl 8 + Self.Blue;
      Result.Alpha := Self.Alpha shl 8 + Self.Alpha;
    end;
    à ça, que je trouve plus lisible, avec de beaux alignements :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function TColor32.ToFPColor: TFPColor;
    begin
      Result.Red   := Self.Red   shl 8 + Self.Red;
      Result.Green := Self.Green shl 8 + Self.Green;
      Result.Blue  := Self.Blue  shl 8 + Self.Blue;
      Result.Alpha := Self.Alpha shl 8 + Self.Alpha;
    end;
    Pas de quoi fouetter un chat, hein !

    En désespoir de cause je suis reparti des unités de ta dernière démo dans l'autre discussion, mais ça ne change rien.


    En haut le gif d'hier, en bas le rendu de ce matin, où l'on notera que les points en haut à droite ont disparu dessous.
    Nom : compar_imgs700.png
Affichages : 213
Taille : 38,3 Ko

    On dirait que le problème se situe par là :
    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
        with BmpViewerDest do
        begin
          if not RempliD then
          begin
            FastBitmap.ImportFromBitmap
              ( StretchXBR(BmpViewerOrig.FastBitmap.GetBitmap, scale) );
            RempliD := True;
          end;
          // setup des dimensions de la cible
          Width  := W; Height := H;
          Update;
          (FastBitmap.GetBitmap).SaveToFile(chemin + 'xbrmode.bmp'); // le fichier montre
          // que la mise à jour des tailles ne se fait pas, et
          // se fait si les lignes rempliD sont commentées
        end;
      // si les 2 lignes avec RempliD sont commentées, xBR est soft
      // mais rectangle bad -- si décommentées, rect OK mais rendu pas joli
    Une démo du rectangle bad ? Y a qu'à demander :
    Nom : rectanglebad.gif
Affichages : 1353
Taille : 122,0 Ko

    C'est terrible, des trucs pareils.

    Un dernier mot : si je passe en mode not_xbr (le bout de code ci-dessus est le mode xbr) alors je bascule avec StretchBlt et je n'ai pas encore compris pourquoi le retour en mode xbr ne s'effectue graphiquement pas, si les lignes RempliD sont actives.

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 132
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Il faut arriver jusque là :
    Nom : stretchxbr_v2.png
Affichages : 786
Taille : 38,3 Ko
    Bon, je m'en suis sorti :
    - convertir les fichiers d'entrée qui sont en pf24bit en pf32bit (entre autres celui embedded dans la fiche) ;
    si ça peut être utile à quelqu'un :
    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
        bmp32:=TBitmap.Create;
        with bmp32 do begin
          PixelFormat := pf32bit;
          Width := BmpS.Width;
          Height:= BmpS.Height;
          p := 0; // position dans le bmp32.rawimage.data 
          for y := 0 to BmpS.Height-1 do
            for x := 0 to (BmpS.Width*3)-1 do begin
              RawImage.Data[p]:=BmpS.RawImage.Data[(y*BmpS.Width*3)+x];// recopier les bytes
              if ((((y*BmpS.Width*3)+x+1) mod 3) = 0) then begin // tous les 3 bytes de la source
                // 1- inverser R et B dans la dest
                b := RawImage.Data[p-2];
                RawImage.Data[p-2] := RawImage.Data[p];
                RawImage.Data[p] := b;
                // 2- ajouter un 4e byte à la destination
                inc(p);
                RawImage.Data[p] := 255;
              end;
              inc(p);
            end;
        end;
    - bien penser à rajouter le 4e byte partout où il est question de TRGBQuad, exemple dans uManipBMPV4 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function clQuadMix2(c1, c2: tRGBQuad): tRGBQuad;
    begin
      with Result do begin
        rgbRed   := (c1.rgbRed   + c2.rgbRed)   shr 1;
        rgbGreen := (c1.rgbGreen + c2.rgbGreen) shr 1;
        rgbBlue  := (c1.rgbBlue  + c2.rgbBlue)  shr 1;
        rgbReserved := (c1.rgbReserved  + c2.rgbReserved) shr 1; // jpt
      end;
    end;
    Résultat (réduit au 2/3) :
    Nom : bingo_2tiers.png
Affichages : 536
Taille : 68,9 Ko

    L'image d'en haut est toute moche car redimensionnée en utilisant StretchBlt.

  11. #11
    Membre Expert
    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
    Billets dans le blog
    2
    Par défaut


    Par contre de mon coté avec certaines image l'agrandissement n'est pas précis. ou bien des erreur à cause du "RawImage" (même après conversion vers 32bits)
    Cela aurais été bien si on avait acces au code C originel sur lequel les auteurs se sont basé. A la base le XBR agrandit seulement avec des facteurs 2,3,4.
    Dans le lien du tuto que j'ai donné plutôt on trouve un lien vers des sources sur github. Ces code sont des scripts HLSL (cgShader) il y a un "super-xbr" avec un facteur de 6, 8 et adaptatif mais l'algo est différent. Il y aussi le XBRz qui prend en charge les facteurs 5 et 6.

    Sur Sourceforge j'ai trouvé ce petit outil (On peux également télécharger les sources en C)

    Image redimensionnée avec un facteur de 4

    Première image avec ScalerTest
    Nom : upscaled.png
Affichages : 509
Taille : 234,1 Ko
    Image avec StrechXBR4 chez moi
    Nom : Redimensionné_hqx_original2.png
Affichages : 474
Taille : 126,8 Ko

    On voit bien que le second est moins précis (regardez les jambe du gladiateur par exemple)

    [EDIT] Je pense que vous avez remarqué il y a aussi des variations minimes dans les couleurs
    L'algo en lui même se débrouille pas trop mal, mais le résultat varie suivant la source
    [/EDIT]


    Bref j'ai vu que les auteurs XBRV4 avec fait un conversion du XBR avec facteur de 2 originel. A voir je pense

    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

  12. #12
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 132
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 132
    Par défaut
    Citation Envoyé par BeanzMaster Voir le message
    --snip--
    Ouais ouais ouais ouais-ouais...

    De mon côté, j'ai décoché , vu comment je misère avec certains fichiers qui sont très bien ouverts par les routines Mitchell mais redimensionnés avec les traits verticaux habituels des défauts de scanline...
    Je pense entre autres à la série des fichiers FondRVB... tu sais, les carrés 250x250 marron/bleu (le ...32bitsKC), c'est l'enfer.

    Ça, plus les redimensionnements laborieux dès que je passe sous un rapport de 800 % (où des commentaires expliquent qu'on bascule en mode StretchBlt), bref, la loose...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      // Si ScaleFactor < 8.0 on procède à un XBR avec 8 et
      // qui sera suivi d'un ajustement de taille rapide avec StretchBlt
    C'est fatigant, tout ça...

  13. #13
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 132
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 132
    Par défaut
    Salut,
    Citation Envoyé par BeanzMaster Voir le message
    Bref j'ai vu que les auteurs XBRV4 avec fait un conversion du XBR avec facteur de 2 originel. A voir je pense
    Tu l'as vu où ?

    Bon, moi j'en suis là, j'ai bien souffert !
    D'abord il faut impérativement travailler sur des bitmap destination en pf24bit, sinon bonjour les traits verticaux.
    Ensuite j'avais noté que les changements de rendu de tailles ne s'opéraient qu'aux alentours de valeurcurseur + .05, lié à des Trunc planqués dans une sous-routine d'une sous-procédure, bref, en multipliant par 10 avant l'appel puis en réduisant par 10 l'image traitée, ça devient tout bon, genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
          if NotRound then begin // valeur du curseur avec décimale
            aBmp := (StretchXBR(imgSrc.Picture.Bitmap, scale * 10));
            pnl4Dst.Width  := aBmp.Width  div 10;
            pnl4Dst.Height := aBmp.Height div 10;
            Canvas.StretchDraw(rect(0,0,pnl4Dst.Width,pnl4Dst.Height),aBmp);
          end else begin
            aBmp := (StretchXBR(imgSrc.Picture.Bitmap, scale));
            pnl4Dst.Width  := aBmp.Width ;
            pnl4Dst.Height := aBmp.Height;
            Assign(aBmp);
          end;
    Le problème c'est le temps dément que ça prend
    4 secondes pour passer de 128x64 à 538x156, je vous laisse imaginer le temps si traitement identique (x 4,2) d'une photo de 4 Mo, 11 minutes à la louche si je ne me suis pas trompé.
    Ça risque de limiter l'utilisation, ça...

    Regardez attentivement le temps de traitement dans la barre de titre de la fenêtre, à comparer avec le rapport d'agrandissement (label "Step") :

    Nom : xbr.gif
Affichages : 290
Taille : 205,6 Ko

    Il y a un test que je n'ai pas bien compris, dans leur code : si le facteur d'échelle est inférieur à 8 ça n'apporte rien, qu'ils disent, alors je l'ai zappé (ainsi que d'autres trucs, en double, et des machins rapatriés dans le fichier de la fiche plutôt que le module, c'est plus logique et plus clair.
    Vais peut-être rajouter une option pour n'avoir que de valeurs entières -- ou alors j'ai foiré quelque chose : je viens de vérifier avec la version Windows/Delphi, qui fonctionne avec des valeurs décimales du curseur, sans prendre les temps déments que j'ai vécu.
    Bon, à chaque jour suffit sa peine, c'est suffisamment touffu et compliqué comme ça.

  14. #14
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 132
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 132
    Par défaut
    Bonjour,


    je suis au désespoir, au 36e dessous, au fond du gouffre, et je ne vois pas d'issue...

    Comme j'estimais que les temps déments d'hier n'étaient pas envisageables, surtout qu'ils n'affectent pas le projet Delphi, j'ai décidé de repartir de la base (concernant le module, car je suis satisfait de ma petite ihm, rapide pour les tests), pour voir ce que ça donne, et force est de reconnaître que ce n'est pas brillant...
    Je ne vous inflige pas tout, juste le passage de 10 à 8 :

    Nom : 10to8.gif
Affichages : 1745
Taille : 320,0 Ko

    et face à ça, les bras m'en tombent.

    il faut savoir lâcher l'affaire : si j'ai besoin des possibilités de cet outil, je l'utiliserai sous XP, suite à compilation impeccable sous Delphi7.

    Et voilà.

  15. #15
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 132
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 132
    Par défaut
    Citation Envoyé par Jipété Voir le message
    il faut savoir lâcher l'affaire : si j'ai besoin des possibilités de cet outil, je l'utiliserai sous XP, suite à compilation impeccable sous Delphi7.
    Grâce au redoutable composant de Jérôme et à son infinie patience face à mes questions parfois lamentables, ben... voilà :

    Nom : demo_xbr.gif
Affichages : 265
Taille : 272,1 Ko

    Bon, ça c'est juste la maquette d'étude et de "portage" de D7 vers Laz, le reste (retomber dans les marques de l'ihm d'origine) sera une simple formalité.

    Jérôme, comment te remercier ?




Discussions similaires

  1. [Lazarus] Portabilité d'un code développé sous Delphi 5 vers Lazarus
    Par Emeric974 dans le forum Lazarus
    Réponses: 2
    Dernier message: 22/05/2013, 20h42
  2. Porter un code source delphi windows à linux
    Par Coussati dans le forum Delphi
    Réponses: 4
    Dernier message: 08/10/2006, 00h58
  3. Réponses: 3
    Dernier message: 05/10/2005, 17h19
  4. [Think Pascal] Portage/conversion Think Pascal vers MAC/Windows/Linux
    Par Alain Vitry dans le forum Autres IDE
    Réponses: 1
    Dernier message: 19/03/2005, 11h24

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