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 :

Changer la taille d'un TBitmap transparent [Lazarus]


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Changer la taille d'un TBitmap transparent
    Bonjour,

    tout est dans le titre. Le TBitmap est à l'origine un fichier.png. Comment peut-on changer sa taille sans perdre la transparence, si possible avec les librairies natives de Lazarus ?

    Merci. Cordialement. Gilles
    Dernière modification par Alcatîz ; 29/05/2019 à 21h52. Motif: préfixe

  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
    Citation Envoyé par Selzig Voir le message
    Bonjour,

    tout est dans le titre. Le TBitmap est à l'origine un fichier.png. Comment peut-on changer sa taille sans perdre la transparence, si possible avec les librairies natives de Lazarus ?

    Merci. Cordialement. Gilles
    Bonjour Gilles

    oui je pense que c'est possible en passant par TLazIntfImage pour conserver la transparence
    et pour le redimensionnement cf : http://wiki.freepascal.org/Developin...from_LazCanvas

    Dans l'unité de FPC extinterpolation.pp du paquet FCL-Image tu trouveras des filtres d'interpolation

    • TBlackmanInterpolation
    • TBlackmanSincInterpolation
    • TBlackmanBesselInterpolation
    • TGaussianInterpolation
    • TBoxInterpolation
    • THermiteInterpolation
    • TLanczosInterpolation
    • TQuadraticInterpolation
    • TCubicInterpolation
    • TCatromInterpolation
    • TBilineairInterpolation
    • THanningInterpolation
    • THammingInterpolation


    Essayes ça :

    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
     
    var
      DestIntfImage, SourceIntfImage: TLazIntfImage;
      DestCanvas: TLazCanvas;
      Png: TPortableNetworkGraphic;
    begin
         Png := TPortableNetworkGraphic.Create;
         // Prepare the destination 
         DestIntfImage := TLazIntfImage.Create(0, 0, [riqfRGB, riqfAlpha]); // Creation format 32bits  
         DestCanvas := TLazCanvas.Create(DestIntfImage);
         //Prepare the source
         SourceIntfImage := TLazIntfImage.Create(0, 0);
         SourceIntfImage.LoadFromBitmap(SourceBitmap.Handle, 0);
     
         // Execute the stretch draw via TFPSharpInterpolation
         DestCanvas.Interpolation := TFPSharpInterpolation.Create;
         DestCanvas.StretchDraw(0, 0, DestWidth, DestHeight, SourceIntfImage);
     
        // load the image into the TBitmap
        Png.LoadFromIntfImage(DestIntfImage);  // Importation TLazIntfImage vers PNG pour conserver la transparence
     
        Png.SaveToFile('test.png');
     
        SourceIntfImage.Free;
        DestCanvas.Interpolation.Free;  
        DestCanvas.Free;
        DestIntfImage.Free;
        Png.Free;
    end;
    ps : je n'ai pas vérifier si cela fonctionne

    A+

    Jérôme
    • "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
    Invité
    Invité(e)
    Par défaut
    Bonjour Jérôme,

    effectivement cela semble fonctionner. J'en aurai la certitude quand tout mon code sera assemblé dans mon composant puis porté sous Linux et Os X.
    Merci beaucoup.
    Cordialement. Gilles

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 166
    Par défaut
    Yop !
    Citation Envoyé par BeanzMaster Voir le message
    Dans l'unité de FPC extinterpolation.pp du paquet FCL-Image tu trouveras des filtres d'interpolation
    T'as oublié le TMitchell dans ta liste, faut dire aussi qu'il est ailleurs, enfin, au même endroit mais dans un autre fichier : fpinterpolation.inc
    (organisation mode pagaille…)

    Et il y a un truc important à savoir : selon le type d'image (le sujet), certains filtres rendent mieux que d'autres. Il faut faire des essais, puis encore des essais, et enfin, toujours des essais.
    Avec des photos d'immeubles, d'architecture, des photos de gens, de foules, des photos de paysages, des photos très contrastées et d'autres peu contrastées.

    Bon courage, on ne peut pas avoir des résultats parfaits du premier coup.

    À titre d'exemple, le même fichier de test passé à travers le filtre Box à gauche et le filtre Mitchell à droite, pour un léger agrandissement. Comparez attentivement le rendu du damier, ainsi que le texte, ou le volant de la voiture :

    Nom : compar_2_filtres.jpg
Affichages : 240
Taille : 69,3 Ko

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 04/12/2012, 09h40
  2. Changer la taille d'un <select>
    Par Etanne dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/09/2005, 08h58
  3. Changer la taille et/ou pos de la taskBar
    Par Sunny dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 28/07/2005, 16h15
  4. Comment changer la taille Text < 8
    Par Xavier dans le forum C++Builder
    Réponses: 4
    Dernier message: 14/10/2004, 08h24
  5. Changer la taille d'un tableau déjà initialisé
    Par totofweb dans le forum C++
    Réponses: 2
    Dernier message: 25/07/2004, 15h55

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