Page 1 sur 1

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

Publié : mar. 16/janv./2024 17:49
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.

Re: LIb 2DDrawing et image en transparence

Publié : mer. 17/janv./2024 10:02
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



Re: LIb 2DDrawing et image en transparence

Publié : mer. 17/janv./2024 12:47
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