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,
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
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 :
ps : je n'ai pas vérifier si cela fonctionne
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;
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
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
Yop !
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 :
![]()
Partager