Bonjour,
Voilà j'aimerai définir une couleur en transparence sur un Tbitmap, mais je ne trouve pas le moyen sous FMX.
Merci de votre aide.
Bonjour,
Voilà j'aimerai définir une couleur en transparence sur un Tbitmap, mais je ne trouve pas le moyen sous FMX.
Merci de votre aide.
Tu as DrawBitmap qui gère AOpacity pour l'ensemble de l'image
Sinon, on peut penser que FMX gère le Canal Alpha puis que FMX.Types.TBitmap.Pixels utilise un TAlphaColor
Utilse un PNG, cela gère naturellement le fond transparent du PNG, c'est un format conçu pour cela !
Sinon utilise un Mask pour déterminer zones transparentes
le TMaskToAlphaEffect me semble tout à fait approprié !
voir aussi TColorKeyAlphaEffect avec une Tolerance Zéro, je n'ai pas bien compris comment il fonctionne, il semble qu'il soit nécessaire d'avoir déjà un couleur de transparence dans l'image PNG
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !![]()
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs
Salut à tous,
à mon avis, Opacity ne règlera pas le problème : il gère la consistance globale du contrôle, et ne fait pas de différence.
Pareil pour le Canal Alpha : ca tient du même principe à mon avis.
Certains softs savent attribuer à une couleur l'attribut "transparent" (genre Office par exemple : quand on sélectionne un endroit de l'image, on peut déclarer la couleur en dessous comme devant être transparente. Par contre je ne suis pas sur d'avoir vu ça dans FMX.
Le format PNG gère effectivement une couleur comme "transparente", mais je n'ai jamais fait le test avec FMX. Mais à vue de nez, ça me semble être la seule façon de procéder, sauf à redéfinir la méhode Paint pour qu'elle ne dessine pas un point de la couleur donnée. Un peu brutal...
L'autre solution, est de mettre une couleur de fond de ton TImage de la couleur de celle que tu veux invisible. Ca simule le resultat.
Je sais pas si c'est possible d'ailleurs...
Merci pour votre réponse,
Malheureusement je ne peut pas utiliser des PNG, je décompresse des fichiers BMP en "Runtime".
Je ne sais pas comment utilisé un mask pour déterminer zones transparentes avec le TMaskToAlphaEffect !
Je continue à chercher comment il fonctionne, si quelqu'un a des idées, elles sont bien venues!
Merci.
je suis pas sur que le Mask va t'aider. De ce que j'ai pu en voir, il permet de définir une zone sur laquelle on va appliquer un effet. Mais pour une image repérer les points d'une couleur particulière et définir une zone dessus, ça risque de faire pas mal de zones...
Merci arkhamon pour votre aide.
Effectivement je pense la même chose.
Je continue mes recherches....
J'ai trouvé un truc en regardant un peu :
La définition de TAlphaColorRec contient entre autre :
Null = TAlphaColor($00000000);
Si tu sais la couleur des points que tu veux rendre transparents, tu as une solution un peu brutale qui consiste à balayer ton image point par point, et lui affecter cette constante en lieu et place de la couleur du point.
L'octet de poids fort de la couleur ($00000000) donne l'intensité du point, à savoir $00 le rend transparent.
Ca devrait te permettre d'atteindre ton objectif. Après, c'est un peu artisanal comme méthode mais bon...
Même, tu peux décider de rendre plsuierus couleurs transparents, en modificant uniquement la valeur Alpha d'un certain nombre de points en fonction de leur couleurs de départ. Par contre la boucle riisque d'être un peu longue à exécuter. Si tu peux, arrange toi pour désactiver le redessin du contrôle durant la boucle.
ensuite autre méthode peut être un peu plus propre ou moins couteuse en resources : rempalcer les couleurs directement dans le BMP avant de l'envoyer à l'affichage. Ca accélèrera peut etre la manip... Il suffirait par exemple de mettre $000000 à chaque point que tu veux rendre invisible. D'un autre côté, le BMP ne gérant pas le Alpha (sauf avis contraire), je sais pas trop comment tu mettras le Alpha à $00...![]()
Partager