Dessiner sur l'alpha d'une image

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Dessiner sur l'alpha d'une image

Message 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..
Fred
Site Admin
Messages : 2652
Inscription : mer. 21/janv./2004 11:03

Re: Dessiner sur l'alpha d'une image

Message par Fred »

Tu as essayé le mode '#PB_2DDrawing_AlphaChannel' de DrawingMode() ? http://www.purebasic.com/documentation/ ... gmode.html
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Dessiner sur l'alpha d'une image

Message 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:
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Dessiner sur l'alpha d'une image

Message 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.
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Dessiner sur l'alpha d'une image

Message 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 ^^.
Répondre