[RÉSOLU] LIb 2DDrawing et image en transparence

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
boddhi
Messages : 604
Inscription : lun. 26/avr./2010 16:14
Localisation : S 48° 52' 31'' / O 123° 23' 33''

[RÉSOLU] LIb 2DDrawing et image en transparence

Message par boddhi »

Bonjour,

N'étant pas très familier de la lib 2DDrawing, j'ai un petit souci avec le code suivant.
Je cherche à créer une image avec un fond transparent et du texte puis l'afficher à l'aide d'un ImageGadget dans un ScrollAregaGadget.
Le résultat graphique serait l'équivalent d'un TextGadget.
J'ai beau jouer avec toutes les options liées au mode de dessin des instructions CreateImage, DrawingMode et DrawText, je n'arrive pas au résultat escompté.
Quelqu'un saurait-il comment faire ?

Code : Tout sélectionner

If OpenWindow(0, 0, 0, 400, 400, "DrawText Exemple", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  ScrollAreaGadget(0,4,4,396,396,300,300)
  TextGadget(1,4,4,80,20,"TextGadget")
  ;
  Texte.s="Image 1"
  StartDrawing(WindowOutput(0))
  Largeur.u=TextWidth(Texte):Hauteur.u=TextHeight(Texte)
  StopDrawing()
  If CreateImage(0,Largeur,Hauteur) And StartDrawing(ImageOutput(0))
    DrawingMode(#PB_2DDrawing_Transparent)
    DrawText(0,0,Texte,255)
    ImageGadget(2,4,30,Largeur,Hauteur,ImageID(0))
    StopDrawing() 
  EndIf
  ;
  Texte.s="Image 2"
  StartDrawing(WindowOutput(0))
  Largeur.u=TextWidth(Texte):Hauteur.u=TextHeight(Texte)
  StopDrawing()
  If CreateImage(1,Largeur,Hauteur,32,#PB_Image_Transparent) And StartDrawing(ImageOutput(1))
    DrawingMode(#PB_2DDrawing_Transparent)
    DrawText(0,0,Texte,255)
    StopDrawing() 
    OpenGadgetList(0)
    ImageGadget(3,4,60,Largeur,Hauteur,ImageID(1),#PB_Image_Border)
    CloseGadgetList()
  EndIf
  ;
  Texte.s="Image 3"
  StartDrawing(WindowOutput(0))
  Largeur.u=TextWidth(Texte):Hauteur.u=TextHeight(Texte)
  StopDrawing()
  If CreateImage(2,Largeur,Hauteur) And StartDrawing(ImageOutput(2))
    DrawingMode(#PB_2DDrawing_Transparent)
    DrawText(0,0,Texte,255,RGBA(0,0,0,0))
    StopDrawing() 
    OpenGadgetList(0)
    ImageGadget(4,4,90,Largeur,Hauteur,ImageID(2))
    CloseGadgetList()
  EndIf
  
  Repeat
    Event = WaitWindowEvent()
  Until Event = #PB_Event_CloseWindow
EndIf
Merci.
Dernière modification par boddhi le mer. 17/janv./2024 12:48, modifié 1 fois.
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

Re: LIb 2DDrawing et image en transparence

Message par Mesa »

Code : Tout sélectionner

If OpenWindow(0, 0, 0, 405, 240, "ScrollAreaGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) 
	ScrollAreaGadget(0, 10, 10, 390,220, 575, 575, 30)
	
	
	x=10
	y=10
	
	
	For i=1 To 8
		CreateImage(i, 32,32,32,#PB_Image_Transparent);transparence= 32 bits obligatoire
		StartDrawing(ImageOutput(i))
		DrawingMode(#PB_2DDrawing_Transparent|#PB_2DDrawing_AlphaBlend) 
		Box(0,0,32,32,RGBA(Random(255),Random(255),Random(255),Random(255,128)))
		DrawText(10,16,"ok",RGBA(Random(255),Random(255),Random(255),Random(255,128)))
		StopDrawing()
		ImageGadget(i,x,y,32,32,ImageID(i))
		x=x+42
		StopDrawing()
	Next i
	CloseGadgetList() 
	
	
	im=CreateImage(#PB_Any, 32,32,32,#PB_Image_Transparent);transparence= 32 bits obligatoire
	StartDrawing(ImageOutput(im))
	DrawingMode(#PB_2DDrawing_Transparent|#PB_2DDrawing_AlphaBlend) 
	; 		Box(0,0,32,32,RGBA(Random(255),Random(255),Random(255),Random(255,128)))
	text$="kok"
	x=32/2 - TextWidth(text$)/2
	y=32/2 - TextHeight(text$)/2
	DrawText(x,y,"kok",RGBA(0,0,0,255))
	StopDrawing()
	
	OpenGadgetList(0)
	img=ImageGadget(#PB_Any,100,75,32,32,ImageID(im))
	img2=ImageGadget(#PB_Any,100,150,32,32,0, #PB_Image_Raised)
	img3=ImageGadget(#PB_Any,200,150,32,32,0, #PB_Image_Border)
	CloseGadgetList()
	
	SetGadgetState(img2, ImageID(im))
	SetGadgetState(img3, ImageID(im))
	
	
	Repeat 
		Select WaitWindowEvent() 
			Case  #PB_Event_CloseWindow 
				End 
			Case  #PB_Event_Gadget 
				Select EventGadget()
						
				EndSelect
		EndSelect 
	ForEver 
EndIf


boddhi
Messages : 604
Inscription : lun. 26/avr./2010 16:14
Localisation : S 48° 52' 31'' / O 123° 23' 33''

Re: LIb 2DDrawing et image en transparence

Message par boddhi »

Merci Mesa pour ton code :wink:
L'idée était donc d'associer plusieurs valeurs aux options. Ce à quoi je n'avais pas pensé :oops:

Dans l'intervalle, je m'étais résigné à un autre choix de rendu (qui tout compte fait me plait assez bien :) ).
Faute de grives, on mange des merles ! :mrgreen:
Une adaptation rapide d'un bout de mon code :

Code : Tout sélectionner

Enumeration Fenetres
  #CGP_FENPRINCIPALE
EndEnumeration
Enumeration Gadgets
  #GAD_FP_ZD_GALERIE
  #GAD_FP_IMG_0
EndEnumeration
Enumeration Polices
  #POLICE
EndEnumeration
Enumeration Images
  #IMG_TEXTEEXEMPLE
EndEnumeration

Global.u HauteurPoliceSysteme
NomPolice.s=""
FichierPolice.s=""
#TEXTETEST="ABCDEFGH abcdefgh ÀCÉÏÔ àçéïô 012345 ?!€$+={([A"
#COUL_TEXTETITRE=#White
#COUL_FONDTEXTETITRE=#Red
#COUL_TEXTEEXEMPLE=#Black
#COUL_FONDTEXTEEXEMPLE=#White

CompteurGadget.u=0:HauteurImage.u=0:PositionY.u=4:HauteurTexte.u=0:LargeurTexte.u=0
Global FacteurEchelleX.f=DesktopScaledX(100)/100
Global FacteurEchelleY.f=DesktopScaledY(100)/100
;
Procedure.u Fc_Affichage_ImagePolice(ArgFichier.s,ArgNomPolice.s,ArgTexteComplement.s,ArgCompteur.u,ArgPositionY.l)
  Debug #PB_Compiler_Procedure+" (Fichier="+ArgFichier+",NomPolice="+ArgNomPolice+",TexteComplement="+ArgTexteComplement+",Compteur="+ArgCompteur+",PositionY="+ArgPositionY+")",5
  Protected.u PositionY,HauteurImage,LargeurTexte,HauteurTexte
  
  If RegisterFontFile(ArgFichier)
    LoadFont(#POLICE,ArgNomPolice,24)
    StartDrawing(WindowOutput(0))
    DrawingFont(FontID(#POLICE))
    LargeurTexte=TextWidth(#TEXTETEST):HauteurTexte=TextHeight(#TEXTETEST)
    StopDrawing()
    PositionY=HauteurTexte+8:HauteurImage=HauteurPoliceSysteme+8+PositionY
    If CreateImage(#IMG_TEXTEEXEMPLE,792*FacteurEchelleX,HauteurImage,32,#COUL_FONDTEXTEEXEMPLE)
      StartDrawing(ImageOutput(#IMG_TEXTEEXEMPLE))
      DrawingMode(#PB_2DDrawing_Transparent)
      Box(0,0,792*FacteurEchelleX,HauteurPoliceSysteme+8,#COUL_FONDTEXTETITRE)
      DrawText(10,4,ArgNomPolice+" "+ArgTexteComplement,#COUL_TEXTETITRE)
      DrawingFont(FontID(#POLICE))
      DrawText(8,HauteurPoliceSysteme+12,#TEXTETEST,#COUL_TEXTEEXEMPLE)
      StopDrawing()
      UsePNGImageEncoder()
      ImageGadget(#GAD_FP_IMG_0+ArgCompteur,4,ArgPositionY/FacteurEchelleY,792,HauteurImage,ImageID(#IMG_TEXTEEXEMPLE))
      GadgetToolTip(#GAD_FP_IMG_0+ArgCompteur,ArgFichier)
    EndIf
    FreeFont(#POLICE)
    FreeImage(#IMG_TEXTEEXEMPLE)
    ProcedureReturn HauteurImage
  EndIf
EndProcedure

;DossierPolice="D:\Polices\"
DossierPolice.s=GetEnvironmentVariable("WINDIR")
If Right(DossierPolice,1)<>"\":DossierPolice+"\":EndIf
DossierPolice+"Fonts\"

If OpenWindow(#CGP_FENPRINCIPALE, 0, 0, 800, 200, "Exemple...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  ScrollAreaGadget(#GAD_FP_ZD_GALERIE,4,4,792,192,792,192)
  ; 
  StartDrawing(WindowOutput(#CGP_FENPRINCIPALE))
  HauteurPoliceSysteme=TextHeight("Ly")
  StopDrawing()
  For Compteur.a=0 To 1
    Select Compteur
      Case 0:NomPolice.s="Arial":FichierPolice.s=DossierPolice+"arial.ttf"
      Case 1:NomPolice="Arial gras":FichierPolice=DossierPolice+"arialbd.ttf"
    EndSelect
    HauteurImage=Fc_Affichage_ImagePolice(FichierPolice,NomPolice,"",CompteurGadget,PositionY)
    If HauteurImage
      PositionY+HauteurImage
      CompteurGadget+1
    EndIf
  Next
  SetGadgetAttribute(#GAD_FP_ZD_GALERIE,#PB_ScrollArea_InnerHeight,PositionY/FacteurEchelleY)
  
  Repeat
    Event = WaitWindowEvent()
  Until Event = #PB_Event_CloseWindow
EndIf
Répondre