Coucou Kernadec
Dans ton code, tu utilises point() sur un canvasoutput(), ça ne peut pas fonctionner correctement (d'après la doc), puisque tu dois faire un point() sur un imageoutput() ou un spriteoutput()
. Je crois, d'après le doc, que Point() ne fonctionne pas correctement pour l'alpha avec canvasoutput().
Je ne comprends pas trop ce que tu souhaites obtenir, mais voici une tentative de correction (je ne sais pas si c'est ce que tu veux) :
Code : Tout sélectionner
Procedure Affiche_image(x, y,Rouge$, Vert$, Bleu$, Lux$ )
Protected couleur, C_aleatoire$, C_Point$
; d'abord on va créer li'amge qu'on va afficher ensuite sur le canvas)
; c'est sur cette image qu'on va faire le point() et non sur le canvas car il n'a pas d'alpha.
tempimg = CreateImage(#PB_Any, GadgetWidth(1), GadgetHeight(1), 32, #PB_Image_Transparent)
If StartDrawing(ImageOutput(tempimg))
DrawingMode(#PB_2DDrawing_AllChannels )
DrawAlphaImage(ImageID(1), 0, 0) ; Image 32bit
DrawingMode(#PB_2DDrawing_AlphaClip)
Box(0, 0, 400, 150, RGBA(Val(Rouge$), Val(Vert$), Val(Bleu$), Val(Lux$))) ; Box supérieure couleur aléatoire
couleur = Point(50, 50)
Debug "Point() : " + couleur
DrawingMode(#PB_2DDrawing_Default )
C_aleatoire$ = " Origine RGBA : ( " + Rouge$ + ", " + Vert$ + ", " + Bleu$ + ", " + Lux$ + " )"
DrawText(1, 20," RGBA aléatoire " + C_aleatoire$, #Black, couleur)
; Restaure Couleurs RGBA
; Couleurs de retour avec la valeur de Point(x, y) avec les fonctions couleurs red() Green() Blue() Alpha()
Red$ = Right("00" + Str(Red(Couleur)),3)
Green$ = Right("00" + Str(Green(Couleur)),3)
Blue$ = Right("00" + Str(Blue(Couleur)),3)
Alpha$ = Right("00" + Str(Alpha(couleur)),3)
Debug "Alpha" + Alpha(couleur)
; Semble pas être la bonne formule pour car on récupère pas les couleur RGBA envoyée au départ
C_Point$ = "Point() RGBA : ( " + Red$ + ", " + Green$ + ", " + Blue$ + ", " + Alpha$ + " )"
StopDrawing()
EndIf
If StartDrawing(CanvasOutput(1))
DrawingMode(#PB_2DDrawing_AllChannels )
DrawAlphaImage(ImageID(tempimg), 0, 0)
StopDrawing()
EndIf
FreeImage(tempimg)
If StartDrawing(CanvasOutput(3)) ; Box du bas couleur box du haut avec transparence fixe = 255
DrawAlphaImage(ImageID(3), 0, 0) ; Image 32bit
DrawingMode(#PB_2DDrawing_Transparent)
Box(0, 0, 400, 150, RGBA(Val(Rouge$), Val(Vert$), Val(Bleu$), 255))
DrawingMode(#PB_2DDrawing_Default )
C_aleatoire$ = "Origine RGBA : ( " + Rouge$ + ", " + Vert$ + ", " + Bleu$ + ", " + 255 + " )"
DrawText(1, 20, "Origine RGB ( " + Rouge$ + ", " + Vert$ + ", " + Bleu$ + ", " + "Alpha = 255" , #Black, RGBA(Val(Rouge$), Val(Vert$), Val(Bleu$), 255))
StopDrawing()
EndIf
; resultat box du milieu la couleur alpha est la identique mais pas les en valeurs
If StartDrawing(CanvasOutput(2))
DrawAlphaImage(ImageID(2), 0, 0) ; Image 32bit
DrawingMode(#PB_2DDrawing_Transparent)
Box(0, 0, 400, 150, Couleur) ;Affiche la Box du mileu avec la couleur de la box d'en haut
DrawingMode(#PB_2DDrawing_Default )
DrawText(1, 20, " Couleur identique à la box 1 depuis point() avec alpha bon", #Black, Couleur)
DrawText(1, 40, " La fonction Box(x,y,xx,yy, point()) a recu l'Alpha comment ?", #Black, Couleur)
DrawText(1, 60, " Pas compris la formule de retour des valeurs depuis Point()", #Black, Couleur)
DrawText(1, 80, " La conversion des valeurs Point() en RGBA donne", #Black, Couleur)
DrawText(1, 100, " ces valeurs de Couleurs de Point() ( " + Red$ + ", " + Green$ + ", " + Blue$ + ", " + Alpha$ +" )" , #Black, Couleur)
DrawText(1, 120, " Red() Green() Blue() Alpha(), ne fonctionne pas ??", #Black, Couleur)
StopDrawing()
EndIf
Debug "----------------------------------------"
Debug "Origine RGBA : ( " + Rouge$ + ", " + Vert$ + ", " + Bleu$ + ", " + Lux$ +" )"
Debug C_Point$
Debug "========================="
SetWindowTitle(0, "click Points Box 1 Couieur " + "( " + Red$ + ", " + Green$ + ", " + Blue$ + ", " + Alpha$ +" )??")
EndProcedure
If OpenWindow(0, 0, 0, 400, 490, "Points click Fenêtre", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CanvasGadget(1, 0, 0, 400, 150 , #PB_Canvas_ClipMouse)
CanvasGadget(2, 0, 170, 400, 150 , #PB_Canvas_ClipMouse)
CanvasGadget(3, 0, 340, 400, 150 , #PB_Canvas_ClipMouse)
CreateImage(1, 400, 150, 32, #White)
CreateImage(2, 400, 150, 32, #White)
CreateImage(3, 400, 150, 32, #White)
Repeat
event = WaitWindowEvent()
x = WindowMouseX(0)
y = WindowMouseY(0)
Select Event
Case #PB_Event_CloseWindow
End
Case #PB_Event_Gadget
Select EventType()
Case #PB_EventType_LeftClick
Rouge$ = Right("00" + Str(Random(255)), 3)
Vert$ = Right("00" + Str(Random(255)), 3)
Bleu$ = Right("00" + Str(Random(255)), 3)
Lux$ = Right("00" + Str(Random(255)), 3)
; Affiche_image(x, y, "001", "001", "001", "255") ; Point() affichera une valeur noire négative de -16711423
Affiche_image(x, y, Rouge$, Vert$, Bleu$, Lux$)
EndSelect
EndSelect
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
EndIf
EDIT :
Ou alors, c'est ça que tu veux ?
récupérer la valeur de la couleur de la box du haut (la 1ère) et la mettre en bas (la troisième), mais avec un alpha à 255 ?
Code : Tout sélectionner
Procedure updateCanvas()
If StartDrawing(CanvasOutput(0))
DrawingMode(#PB_2DDrawing_AllChannels)
DrawAlphaImage(ImageID(0), 0,0)
StopDrawing()
EndIf
EndProcedure
Procedure Affiche_image(x, y,Rouge$, Vert$, Bleu$, Lux$ )
Protected *couleur
If StartDrawing(ImageOutput(0))
DrawingMode(#PB_2DDrawing_AllChannels) ; important : utiliser un drawingmode avec tous le channels pour pouvoir récupérer les couleurs et l'alpha
; Affiche box d'en haut de la fenetre avec Alpha
Box(0, 0, 400, 150, RGBA(Val(Rouge$), Val(Vert$), Val(Bleu$), Val(Lux$))) ; Box supérieure couleur aléatoire
; affiche box d'en bas de la fenetre avec Alpha à 255
Box(0, 340, 400, 150, RGBA(Val(Rouge$), Val(Vert$), Val(Bleu$), 255)) ; Box supérieure couleur aléatoire
; Affiche dans debug la valeur globale de la couleur
couleur.q = Point(50, 50) ; couleur doit être un .q (je ne sais plus pourquoi ^^)
alpha = Alpha(couleur)
Debug "Point() : " + couleur
Debug "couleur originale : "+Rouge$+", "+Vert$+", "+Bleu$+", "+Lux$
Debug "couleur point() : "+Str(Red(couleur))+", "+Str(Green(couleur))+", "+Str(Blue(couleur))+", "+Str(Alpha(couleur))
; Récupère la couleur supérieure
; Affiche box du milieu de la fenetre avec Alpha depuis la valeur capturée par point()
Box(0, 170, 400, 150, RGBA(Red(couleur), Green(couleur), Blue(couleur), Alpha(couleur))) ;Affiche la Box du milieu avec la couleur de la box d'en haut
; Debug "ARGB : $" + RSet(Right(Hex(@couleur), SizeOf(integer)*2), 8, "0")
StopDrawing()
EndIf
; on update le canvas pour afficher les 3 box.
updateCanvas()
; Couleurs de retour avec la valeur de Point(x, y) avec les fonctions couleurs red() Green() Blue() Alpha()
Red$ = Right("00" + Str(Red(Couleur)),3)
Green$ = Right("00" + Str(Green(Couleur)),3)
Blue$ = Right("00" + Str(Blue(Couleur)),3)
Alpha$ = Right("00" + Str(Alpha(couleur)),3)
; semble ok car on récupère les couleurs RGBA envoyée au départ ;)
Debug "----------------------------------------"
Debug "Origine RGBA : ( " + Rouge$ + ", " + Vert$ + ", " + Bleu$ + ", " + Lux$ +" )"
capture$ = "Retour Point() : ( " + Red$ + ", " + Green$ + ", " + Blue$ + ", " + Alpha$ +" )"
Debug capture$
Debug "========================="
; SetWindowTitle(0, "Points click Fenêtre Couieur " + "( " + Red$ + ", " + Green$ + ", " + Blue$ + ", " + Alpha$ +" )")
;
EndProcedure
If OpenWindow(0, 0, 0, 400, 490, "Points click Fenêtre", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CreateImage(0, 400, 490, 32, #PB_Image_Transparent)
CanvasGadget(0, 0, 0, 400, 490)
updatecanvas()
Repeat
event = WaitWindowEvent()
x = WindowMouseX(0)
y = WindowMouseY(0)
Select Event
Case #PB_Event_Gadget
Select EventType()
Case #PB_EventType_LeftClick
Rouge$ = Right("00" + Str(Random(255)), 3)
Vert$ = Right("00" + Str(Random(255)), 3)
Bleu$ = Right("00" + Str(Random(255)), 3)
Lux$ = Right("00" + Str(Random(255)), 3)
;Affiche_image(x, y, "001", "001", "001", "255") ; Point() affichera une valeur noire négative de -16711423
Affiche_image(x, y, Rouge$, Vert$, Bleu$, Lux$)
EndSelect
EndSelect
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
EndIf
Avec ce code, il me semble que les couleurs sont correctes