[Résolu] Images et texte sur un écran graphique ensemble
[Résolu] Images et texte sur un écran graphique ensemble
Bonjour à tous,
je viens vers vous parce je rame pour trouver une solution que je n'ai pas trouvée sur les forum PB.
Mon programme est sensé afficher des images et du texte sur un écran graphique, mais le problème, c'est que j'ai soit les images ou alors le texte, mais jamais les deux ensembles !
Et comme je sais qu'il y en a qui ont déjà la réponse, c'est pour cela que je m'adresse à vous les mémoires vivantes du PureBasic !
Je vous en remercie tous par anticipation.
Michel
je viens vers vous parce je rame pour trouver une solution que je n'ai pas trouvée sur les forum PB.
Mon programme est sensé afficher des images et du texte sur un écran graphique, mais le problème, c'est que j'ai soit les images ou alors le texte, mais jamais les deux ensembles !
Et comme je sais qu'il y en a qui ont déjà la réponse, c'est pour cela que je m'adresse à vous les mémoires vivantes du PureBasic !
Je vous en remercie tous par anticipation.
Michel
Dernière modification par Micoute le mar. 27/mai/2014 18:11, modifié 1 fois.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
- falsam
- Messages : 7324
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Images et texte sur un écran graphique ensemble
Bibliothéque Canvas ? 2D ? ... ?
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Images et texte sur un écran graphique ensemble
Un bout de code surtout, parce que je ne vois pas où est le problème de mixer graphique et texte, tout est une question d'ordre d'affichage...
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Version de PB : 6.00LTS - 64 bits
Re: Images et texte sur un écran graphique ensemble
Un petit bout de code bien sûr
de toute façon, c'est un code généraliste, c'est juste pour apprendre une nouvelle approche de Purebasic et je suis sûr que c'est faisable, je vous remercie tous encore une fois !
Code : Tout sélectionner
Enumeration
#Fenetre_principale
#f_sortie
#f_aucune
#Image
EndEnumeration
ExamineDesktops()
Global Largeur_Ecran = GetSystemMetrics_(#SM_CXSCREEN)
Global Hauteur_Ecran = GetSystemMetrics_(#SM_CYSCREEN) -20
;programme principal
If InitSprite() = 0
MessageRequester("ERREUR","L'initialisation à échoué",#MB_ICONERROR)
EndIf
If InitKeyboard() = 0
MessageRequester("ERREUR","L'initialisation du clavier a échoué",#MB_ICONERROR)
EndIf
Global Police =FontID(LoadFont(#PB_Any, "Arial Rounded MT", 20, #PB_Font_Bold | #PB_Font_Italic))
Global Police2 =FontID(LoadFont(#PB_Any, "Brush Script MT", 40, #PB_Font_Italic))
ExamineDesktops()
Global x,y,z,Texte.s
Global FichierImageLogo$ = #PB_Compiler_FilePath + "Acronyme.png"
Largeur_Ecran-5 : Hauteur_Ecran-10
Global H_Fenetre_principale = OpenWindow(#Fenetre_principale, 0, 0, Largeur_Ecran, Hauteur_Ecran, "", #PB_Window_SystemMenu )
OpenWindowedScreen(H_Fenetre_principale,0,0,Largeur_Ecran,Hauteur_Ecran,0,0,0,#PB_Screen_SmartSynchronization)
ClearScreen($303030)
;StartDrawing(ScreenOutput())
;DrawingFont(Police2)
;DrawingMode(#PB_2DDrawing_Transparent)
; appel des procédures
y + 18 : x =(Largeur_Ecran/2)-150
;Texte = "ACRONYME"
;For i = x To x + 5
; Y + 1
; DrawText(i, y, Texte, $8A8A8A, $303030)
;Next
;DrawText(i, y, Texte, $FFFFFF, $303030)
;création et affichage de l'image
UsePNGImageDecoder()
Resultat = CreateImage(#Image,375,93)
;
If Resultat
Resultat2 = LoadImage(#Image, FichierImageLogo$)
If Resultat2
ImageGadget(#Image, X,Y,375,93, ImageID(#Image))
EndIf
EndIf
;fin de traitement de l'image
StartDrawing(ScreenOutput())
DrawingFont(Police2)
DrawingMode(#PB_2DDrawing_Transparent)
DrawingFont(Police)
...
DrawText(x,y, ...
StopDrawing()
Global action.i = #f_aucune
Repeat
Global Evenement = WindowEvent()
Select Evenement
Case #PB_Event_CloseWindow
action = #f_sortie
Case 0
ExamineKeyboard()
If KeyboardPushed(#PB_Key_All)
action = #f_sortie
EndIf
FlipBuffers()
EndSelect
Until action = #f_sortie
CloseScreen()
CloseWindow(#Fenetre_principale)
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
- falsam
- Messages : 7324
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Images et texte sur un écran graphique ensemble
Code : Tout sélectionner
ImageGadget(#Image, X,Y,375,93, ImageID(#Image))
tu ne peux pas positionner un ImageGadget dans un OpenWindowedScreen
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
- falsam
- Messages : 7324
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Images et texte sur un écran graphique ensemble
un exemple d'insertion de texte et d'image avec l'utilisation des sprites
Code : Tout sélectionner
Enumeration Font
#Font
EndEnumeration
Enumeration Window
#MainForm
EndEnumeration
Enumeration Sprite
#Logo
#Text
EndEnumeration
Global Width = 500, Height = 500
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0 And InitSound() = 0
MessageRequester("Error", "Sprite system can't be initialized", 0)
End
EndIf
If OpenWindow(#mainform, 0, 0, Width, Height, "Texte & Image", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
LoadFont(#font, "Arial", 25)
If OpenWindowedScreen(WindowID(#mainform), 0, 0, Width, Height)
;Texte
CreateSprite(#Text, 200, 40)
StartDrawing(SpriteOutput(#Text))
Box(0, 0, 200, 40, RGB(255, 255, 255))
DrawingFont(FontID(#Font))
DrawText(0, 0, "Hello Micoute", RGB(222, 184, 135), RGB(255, 255, 255))
StopDrawing()
;Image
LoadSprite(#Logo, #PB_Compiler_Home+"examples\sources\data\PureBasic.bmp")
EndIf
EndIf
Repeat
Repeat
Event = WindowEvent()
Select event
Case #PB_Event_CloseWindow
End
EndSelect
Until event=0
FlipBuffers()
ClearScreen(RGB(255, 255, 255))
DisplaySprite(#Logo, 200, 200)
DisplaySprite(#Text, 150, 300)
ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Escape)
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Images et texte sur un écran graphique ensemble
@falsam
Tu ma devancé

Tu ma devancé


Re: Images et texte sur un écran graphique ensemble
Un grand merci à falsam qui m'a sorti de ma galère, c'est tout simplement prodigieux, il y avait longtemps que je cherchais à faire ce genre d'exercice.
Bonjour en passant à mon voisin de région, je veux dire, ce cher MLD !
Ce qui ne signifie pas que je dédaigne les autres !
Bonjour en passant à mon voisin de région, je veux dire, ce cher MLD !
Ce qui ne signifie pas que je dédaigne les autres !
Dernière modification par Micoute le mar. 27/mai/2014 18:10, modifié 1 fois.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
Re: Images et texte sur un écran graphique ensemble
Falsam affiche sur un sprite puis l'affiche mais tu peux évidemment afficher directement sur l'écran ton texte avec startdrawing(screenoutput()): drawtext():stopdrawing() dans ta boucle principale.
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Version de PB : 6.00LTS - 64 bits
Re: Images et texte sur un écran graphique ensemble
Merci Fig, c'est toujours bon à savoir !
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
- falsam
- Messages : 7324
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Images et texte sur un écran graphique ensemble
J'aurais pu effectivement.Fig a écrit :Falsam affiche sur un sprite puis l'affiche mais tu peux évidemment afficher directement sur l'écran ton texte
L'avantage du sprite même si c'est du texte, est que tu en fais ce que tu veux (ou presque)
Code : Tout sélectionner
Enumeration Font
#Font
EndEnumeration
Enumeration Window
#MainForm
EndEnumeration
Enumeration Sprite
#Logo
#Text1
#Text2
#Text3
EndEnumeration
Global Width = 500, Height = 500
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0 And InitSound() = 0
MessageRequester("Error", "Sprite system can't be initialized", 0)
End
EndIf
If OpenWindow(#mainform, 0, 0, Width, Height, "Texte & Image", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
LoadFont(#font, "Arial", 25)
If OpenWindowedScreen(WindowID(#mainform), 0, 0, Width, Height)
;Text 1
CreateSprite(#Text1, 200, 40)
StartDrawing(SpriteOutput(#Text1))
Box(0, 0, 200, 40, RGB(255, 255, 255))
DrawingFont(FontID(#Font))
DrawText(0, 0, "Hello Micoute", RGB(222, 184, 135), RGB(255, 255, 255))
StopDrawing()
;Image
LoadSprite(#Logo, #PB_Compiler_Home+"examples\sources\data\PureBasic.bmp")
;Text 2
CopySprite(#Text1, #Text2) ;copie du sprite
ZoomSprite(#Text2, 400, 80) ;Zoom
RotateSprite(#Text2, 90, #PB_Absolute)
;Text 3
CopySprite(#Text1, #Text3) ;copie du sprite
ZoomSprite(#Text3, 100, 40) ;Zoom
y=99
EndIf
EndIf
Repeat
Repeat
Event = WindowEvent()
Select event
Case #PB_Event_CloseWindow
End
EndSelect
Until event=0
FlipBuffers()
ClearScreen(RGB(255, 255, 255))
DisplaySprite(#Logo, 200, 200)
DisplaySprite(#Text1, 150, 300)
DisplaySprite(#Text2, -150, 50) ;Affichage
If y=99 : Sens=1: EndIf
If y=401 : Sens=-1 : EndIf
y=y+(1*Sens)
RotateSprite(#Text3, 1, #PB_Relative)
DisplaySprite(#Text3, 390, y)
ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Escape)
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: [Résolu] Images et texte sur un écran graphique ensemble
Un autre avantage du "sprite-texte" c'est la rapidité d'affichage qui est plus grande si tu as beaucoup de texte. (ton texte est bitmap donc plus rapide à afficher alors que la fonction drawtext est relativement lente: font, couleur, espace entre les caractères, traitement de chaque caractère l'un après l'autre etc...)
Un inconvénient: si ton texte change souvent, il faut effacer et modifier le sprite à chaque fois... Autant afficher le texte directement sur l'écran.
Un inconvénient: si ton texte change souvent, il faut effacer et modifier le sprite à chaque fois... Autant afficher le texte directement sur l'écran.
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Version de PB : 6.00LTS - 64 bits
Re: [Résolu] Images et texte sur un écran graphique ensemble
Un grand merci à vous deux, c'est vraiment magnifique tout ce qu'on peut faire avec PB, J'ignorais ou alors j'avais oublié qu'on pouvait faire tant de chose avec les sprites.
J'adore !!!
J'adore !!!
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !