Page 1 sur 1

Dessiner sur l'alpha d'une image

Publié : jeu. 17/oct./2013 8:24
par blendman
Salut

J'ai cherché le moyen de dessiner uniquement sur l'alpha d'une image (avec un drawalphaimage()).

Voici donc ce que j'ai trouvé. Merci à LSI, car je suis d'un code que j'ai trouvé sur un de ses sujets :


Enlever de l'alpha sur une image :

Code : Tout sélectionner

Procedure FiltreMelangeAlpha2(x, y, SourceColor, TargetColor) ; filter To mix alpha for the eraser tool
  ; By Le Soldat inconnu
  ; modif by blendman
  If Alpha(TargetColor) - Alpha(SourceColor) >= 0   
    ProcedureReturn RGBA(Red(TargetColor), Green(TargetColor), Blue(TargetColor), Alpha(TargetColor)-Alpha(SourceColor))
  Else
    ProcedureReturn RGBA(Red(TargetColor), Green(TargetColor), Blue(TargetColor), 0)
  EndIf
EndProcedure
- ajouter de l'alpha sur l'image :

Code : Tout sélectionner

Procedure FiltreMelangeAlpha3(x, y, SourceColor, TargetColor)
If Alpha(TargetColor) + Alpha(SourceColor) <= 255   
    ProcedureReturn RGBA(Red(TargetColor), Green(TargetColor), Blue(TargetColor), Alpha(SourceColor)+Alpha(TargetColor))
  Else
    ProcedureReturn RGBA(Red(TargetColor), Green(TargetColor), Blue(TargetColor), 255)
  EndIf
Endprocedure
Pour l'utiliser, dans le startdrawing() :

Code : Tout sélectionner

DrawingMode(#PB_2DDrawing_CustomFilter)
CustomFilterCallback(@FiltreMelangeAlpha2()) ; pour utiliser la gomme
DrawAlphaImage(ImageID(#VotreImage), X, y, alpha) ; ou avec une couleur en RGBA().

Exemple d'utilisation :
- gommer un calque d'une image
- utiliser un masque alpha
- pour créer un outil de type motif (pattern)
etc..

Re: Dessiner sur l'alpha d'une image

Publié : jeu. 17/oct./2013 8:47
par Fred
Tu as essayé le mode '#PB_2DDrawing_AlphaChannel' de DrawingMode() ? http://www.purebasic.com/documentation/ ... gmode.html

Re: Dessiner sur l'alpha d'une image

Publié : jeu. 17/oct./2013 8:49
par falsam
Merci Blendman. Astuce ajoutés dans mes fiches. Comme quoi il est parfois utile d'actualiser ou de remettre en tête de liste quelques astuces enterrées depuis trop longtemps.
Fred a écrit :Tu as essayé le mode '#PB_2DDrawing_AlphaChannel' de DrawingMode() ? http://www.purebasic.com/documentation/ ... gmode.html
Bonjour Fred. Je ne trouve pas la gomme :mrgreen:

Re: Dessiner sur l'alpha d'une image

Publié : jeu. 17/oct./2013 9:18
par blendman
Fred a écrit :Tu as essayé le mode '#PB_2DDrawing_AlphaChannel' de DrawingMode() ? http://www.purebasic.com/documentation/ ... gmode.html
Oui, bien sûr ;)
ça fonctionne avec Circle(), box(), etc... mais pas avec drawalphaimage().

Si tu utilises une image (donc avec un canal alpha), ça ne marche pas telle quelle, voici ce que ça donne :

Ma technique (c'est ok, mais un peu lent) :
Gomme
Image

Pattern (motif)
Image

Avec DrawingMode(#PB_2DDrawing_AlphaChannel) :
Gomme (bug)
Image

Motif (bug):
Image

Remarques :
- pour le "bug" de la gomme avec DrawingMode(#PB_2DDrawing_AlphaChannel), je pense qu'en inversant d'abord les couleurs du canal alpha, ça devrait marcher.
- par contre, pour le motif, je ne sais pas si en inversant les couleurs du canal alpha ça marchera.

Je vais tester ça pour voir.

Re: Dessiner sur l'alpha d'une image

Publié : jeu. 17/oct./2013 15:09
par blendman
Bon, j'ai testé avec avec DrawingMode(#PB_2DDrawing_AlphaChannel), et même en inversant d'abord les couleurs du canal alpha, ça ne marche pas ;).

Donc, à moins que je m'y prenne mal, je ne vois pas d'autres solutions que celle que j'ai trouvée ^^.