Page 1 sur 1
DrawImage et transparance
Publié : sam. 15/déc./2007 10:50
par Thyphoon
Pour l'editeur de Skin de mon Frontend j'utilise du vectoriel on peu ainsi zoomer comme on veut. Et j'ai besoin de dessiner aussi les images. Le plus pratique étant d'utiliser Drawimage qui permet de redimensionner des images facilement et de n'importe quel taille. Un seul souci j'aurais besoin que la couleur transparante definit ne s'affiche pas. Y a t'il un moyen de faire un equivalent a
DisplayTransparentSprite() mais pour les images ?
Publié : sam. 15/déc./2007 11:36
par Backup
Denis c'est cassé la tete sur un Wrapper GDI+, ou il me semble bien qu'on puisse faire ça avec ...
voir ici :
http://www.purebasic.fr/french/viewtopi ... hlight=gdi
Publié : sam. 15/déc./2007 11:47
par Ollivier
Ce 1er code de NetMaestro permet de fusionner 2 images.
http://www.purebasic.fr/english/viewtop ... highlight=Il y a DrawAlphaImage() qui t'affiche une image avec un facteur de transparence par pixel (coef Alpha. Pour une image 32bpp : 8bits pour le coef alpha, 8 pour le rouge, 8 pour le vert, 8 pour le bleu)
Le 2nd code dans le post suivant
http://www.purebasic.fr/english/viewtop ... t=girl+bmp
permet de tester rapidement chaque pixel. C'est en vue de faire ta propre routine qui va convertir tes images «classiques» en images alpha.
Le 3ème code situé ici
http://www.purebasic.fr/french/viewtopi ... eredwindow
te permet de créer un bitmap alpha à partir d'une image en zone mémoire. Procédure CreateAlphaImage()
Ma ptite idée:
1)Tu as ton image avec une couleur qui doit être considérée comme transparente.
2)Tu fais un tri pixel par pixel que tu convertis en couleur alpha et que tu poke dans une zone mémoire.
3)Tu crées ton image alpha
4)Tu l'affiche avec DrawAlphaImage()
Pour l'étape 2: tu passes d'une couleur 32 bits (00RRVVBB) à une couleur alpha (AARRVVBB). Si tu tombe sur un pixel qui doit être transparent, le pixel alpha doit être (00000000) sinon pour toutes les autres couleurs, les pixels alpha seront (FFXXXXXX).
Woilà, maintenant désolé si quelqu'un a une soluce plus simple. ça fait une petite paille que je n'ai pas fait de prog...
Publié : sam. 15/déc./2007 11:51
par Ollivier
Oups, Dobro : Désolé, c'est le temps que je fasse les recherches, je n'ai pas vu ta réponse.
Alors ça y est Denis a achevé son édifice...
Publié : sam. 15/déc./2007 12:36
par Thyphoon
Merci a tous je vais etudier tout ça !!!
Publié : mer. 19/déc./2007 18:44
par Anonyme2
J'ai posté un exemple avec l'API AlphaBlend l'année dernière, cette API permet le mélange des couleurs (je l'utilise dans la librairie que je suis en train d'écrire)
http://www.purebasic.fr/french/viewtopic.php?t=5512
Publié : ven. 21/déc./2007 6:45
par Anonyme2
Je me suis souvenu avoir lu les explications de la couche Alpha de Microsoft, c'est ici
http://msdn2.microsoft.com/en-us/librar ... S.85).aspx
Avec ça, on peut coder sa propre fonction.
la formule est la suivante et s'applique à chaque composante (rouge, verte, bleue et non pas à la couleur globale):
CouleurAfficher = CouleurSource × alpha / 255 + CouleurFond × (255 – alpha) / 255
La couche alpha est comprise entre 0 (transparence complète) et 225 (opacité complète).
L'exemple donné par MS est le suivant :
Composante rouge de la couleur source : 150
Composante rouge de la couleur du fond : 100
Couche alpha : 200
La couleur rouge affichée sera :
150 × 200 / 255 + 100 × (255 – 200) / 255 = 139