Je voulais juste savoir si il etait plus simple de faire des PNG ou bien de dire a PB que tout ce qui est blanc dans cette image doit devenir transparent
Bon j'ai essayé de mixer les deux programmes.
Le code de DANILO, il est fait pour charger une image, alors que celui de KERNADEC, il a créé et en plus il en créé meme deux
C'est à dire remplacer le blanc de cette fleche reglable par du transparent ...
Pour la faire marcher ce code et voir apparaitre la fleche, faut cliquer au milieu de la fenetre et bouger la souris
Code : Tout sélectionner
Enumeration
#Fenetre
#Image_0
#Image_1
#ImageGadget
EndEnumeration
Global dc.l,epais.l,Hauteur.l,Largeur .l,Pos.l
Hauteur = 300
Largeur = 400
Global DepartX
Global DepartY
Global Passage
epais=12
Pos=34
Procedure LoadTransparentImage(Number, TransColor,NewColor)
;>
;> Number = ImageNumber
;> FileName$ = File Name
;> TransColor = RGB: Transparent Color, -1 = First Color in Picture
;> NewColor = RGB: New Color for TransColor, -1 = System Window Background
;>
Structure _LTI_BITMAPINFO
bmiHeader.BITMAPINFOHEADER
bmiColors.RGBQUAD[1]
EndStructure
Structure _LTI_LONG
l.l
EndStructure
hDC = StartDrawing(ImageOutput(Number))
Box(0, 0, Largeur, Largeur, RGB(255, 255, 255))
If hDC
ImageWidth = ImageWidth(Number) : ImageHeight = ImageHeight(Number)
mem = GlobalAlloc_(#GMEM_FIXED|#GMEM_ZEROINIT,ImageWidth*ImageHeight*4)
If mem
bmi._LTI_BITMAPINFO
bmi\bmiHeader\biSize = SizeOf(BITMAPINFOHEADER)
bmi\bmiHeader\biWidth = ImageWidth
bmi\bmiHeader\biHeight = ImageHeight
bmi\bmiHeader\biPlanes = 1
bmi\bmiHeader\biBitCount = 32
bmi\bmiHeader\biCompression = #BI_RGB
If GetDIBits_(hDC,hBmp,0,ImageHeight(Number),mem,bmi,#DIB_RGB_COLORS) <> 0
If TransColor = -1
*pixels._LTI_LONG = mem+((ImageHeight-1)*ImageWidth*4)
TransColor = *pixels\l
Else
TransColor = RGB(Blue(TransColor),Green(TransColor),Red(TransColor))
EndIf
If NewColor = -1
NewColor = GetSysColor_(#COLOR_BTNFACE) ; #COLOR_WINDOW
EndIf
NewColor = RGB(Blue(NewColor),Green(NewColor),Red(NewColor))
*pixels._LTI_LONG = mem
For a = 1 To ImageWidth*ImageHeight
If *pixels\l = TransColor
*pixels\l = NewColor
EndIf
*pixels + 4
Next a
If SetDIBits_(hDC,hBmp,0,ImageHeight(Number),mem,bmi,#DIB_RGB_COLORS) <> 0
Result = hBmp
EndIf
EndIf
GlobalFree_(mem)
EndIf
EndIf
StopDrawing()
ProcedureReturn Result
EndProcedure
Procedure Ligne(x,y,x1,y1,Width,color)
pen=CreatePen_(#PS_SOLID,Width,color)
penOld=SelectObject_(DC,pen)
MoveToEx_(DC,x,y,0):LineTo_(DC,x1,y1)
DeleteObject_(pen)
DeleteObject_(penOld)
EndProcedure
Procedure DessineFleche(x, y)
Static MemX, MemY
If MemX = x And MemY = Y
ProcedureReturn
Else
MemX = X
MemY = y
EndIf
If Not Passage And x <> 0 And y <> 0
Passage = #True
DepartX = X
DepartY = Y
EndIf
dc=StartDrawing(ImageOutput(#Image_1))
DrawImage(ImageID(#Image_0), 0, 0)
If x => DepartX And y <= DepartY ; Haut droit
x1 = Abs(Largeur + x - (Largeur * 2))
y1 = Hauteur - y
If x1 <= 1 : x1 = 1 : EndIf
If y1 <= 1 : y1 = 1 : EndIf
Ligne(0, GadgetHeight(#ImageGadget)- Pos, GadgetWidth(#ImageGadget) - Pos,GadgetHeight(#ImageGadget) - Pos, epais,RGB(226, 23, 29)) ; Horizontale
Ligne(GadgetWidth(#ImageGadget) - Pos, Pos, GadgetWidth(#ImageGadget) - Pos, GadgetHeight(#ImageGadget) - Pos, epais,RGB(226, 23, 29)) ; Verticale
Ligne(GadgetWidth(#ImageGadget) - Pos, Pos-epais, GadgetWidth(#ImageGadget) - Pos/2*3-epais, Pos*2, epais,RGB(226, 23, 29))
Ligne(GadgetWidth(#ImageGadget) - Pos, Pos-epais, GadgetWidth(#ImageGadget) - Pos/2+epais, Pos*2, epais,RGB(226, 23, 29))
StopDrawing()
ResizeGadget(#ImageGadget, Largeur, Hauteur - y1, x1, Hauteur + y)
ElseIf x => DepartX And y => DepartY ; Bas droit
x1 = Abs(Largeur + x - (Largeur * 2))
y1 = y - Hauteur
If x1 <= 1 : x1 = 1 : EndIf
If y1 <= 1 : y1 = 1 : EndIf
Ligne(0, Pos, GadgetWidth(#ImageGadget) - Pos, Pos, epais,RGB(226, 23, 29)) ; Horizontale
Ligne(GadgetWidth(#ImageGadget) - Pos, Pos, GadgetWidth(#ImageGadget) - Pos, GadgetHeight(#ImageGadget) - Pos, epais,RGB(226, 23, 29)) ; Verticale
Ligne(GadgetWidth(#ImageGadget) - Pos, GadgetHeight(#ImageGadget) - Pos+epais, GadgetWidth(#ImageGadget) - Pos/2*3-epais, GadgetHeight(#ImageGadget) - Pos*2, epais,RGB(226, 23, 29))
Ligne(GadgetWidth(#ImageGadget) - Pos, GadgetHeight(#ImageGadget) - Pos+epais, GadgetWidth(#ImageGadget) - Pos/2+epais, GadgetHeight(#ImageGadget) - Pos*2, epais,RGB(226, 23, 29))
StopDrawing()
ResizeGadget(#ImageGadget, Largeur, Hauteur, x1, Hauteur + y1)
ElseIf x <= DepartX And y => DepartY ; Bas gauche
x1 = Abs(1 - x + largeur)
y1 = Abs(Hauteur - y)
If x1 <= 1 : x1 = 1 : EndIf
If y1 <= 1 : y1 = 1 : EndIf
Ligne(Pos, Pos, GadgetWidth(#ImageGadget), Pos, epais,RGB(226, 23, 29)) ; Horizontale
Ligne(GadgetWidth(#ImageGadget) - x1 + Pos, Pos, GadgetWidth(#ImageGadget)-x1 + Pos, GadgetHeight(#ImageGadget)- Pos, epais,RGB(226, 23, 29)) ; Verticale
Ligne(GadgetWidth(#ImageGadget) - x1 + Pos, GadgetHeight(#ImageGadget) - Pos+epais, GadgetWidth(#ImageGadget) - x1 + Pos/2*3+epais, GadgetHeight(#ImageGadget) - Pos*2, epais,RGB(226, 23, 29))
Ligne(GadgetWidth(#ImageGadget) - x1 + Pos, GadgetHeight(#ImageGadget) - Pos+epais, GadgetWidth(#ImageGadget) - x1 + Pos/2-epais, GadgetHeight(#ImageGadget) - Pos*2, epais,RGB(226, 23, 29))
StopDrawing()
ResizeGadget(#ImageGadget, x ,Hauteur, x1, Hauteur + y)
ElseIf x <= DepartX And y <= DepartY ; Haut gauche
x1 = Abs(1 - x + Largeur)
y1 = Abs(1 - y + Hauteur)
If x1 <= 1 : x1 = 1 : EndIf
If y1 <= 1 : y1 = 1 : EndIf
Ligne(Pos, GadgetHeight(#ImageGadget) - Pos, GadgetWidth(#ImageGadget),GadgetHeight(#ImageGadget) - Pos, epais,RGB(226, 23, 29)) ; Horizontale
Ligne(GadgetWidth(#ImageGadget) - x1 + Pos, Pos, GadgetWidth(#ImageGadget) - x1 + Pos, GadgetHeight(#ImageGadget) - Pos, epais,RGB(226, 23, 29)) ; Verticale
Ligne(GadgetWidth(#ImageGadget) - x1 + Pos, Pos-epais, GadgetWidth(#ImageGadget) - x1 + Pos/2*3+epais, Pos*2, epais,RGB(226, 23, 29))
Ligne(GadgetWidth(#ImageGadget) - x1 + Pos, Pos-epais, GadgetWidth(#ImageGadget) - x1 + Pos/2-epais, Pos*2, epais,RGB(226, 23, 29))
StopDrawing()
ResizeGadget(#ImageGadget, x, y, x1, y1)
EndIf
ResizeImage(#Image_1, x1, y1)
SetGadgetState(#ImageGadget,ImageID(#Image_1))
EndProcedure
CreateImage(#Image_0, Largeur, Hauteur)
CreateImage(#Image_1, Largeur, Hauteur)
image1 = LoadTransparentImage(#Image_0, RGB(255, 255, 255), -1)
OpenWindow(#Fenetre, 0, 0, 800, 600, "Fleche multidirectionnelle", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_TitleBar)
hBmp = ImageGadget(#ImageGadget,0, 0, 0, 0, image1)
DessineFleche(Largeur - 1, Hauteur - 1)
Repeat
Evenement = WaitWindowEvent()
MouseX = WindowMouseX(#Fenetre)
MouseY = WindowMouseY(#Fenetre)
Select Evenement
Case #WM_MOUSEMOVE
If GetAsyncKeyState_(#VK_LBUTTON)
DessineFleche(MouseX , MouseY)
EndIf
EndSelect
Until Evenement = #PB_Event_CloseWindow