[Résolu] Images et texte sur un écran graphique ensemble

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

[Résolu] Images et texte sur un écran graphique ensemble

Message par Micoute »

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
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 !
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Images et texte sur un écran graphique ensemble

Message par falsam »

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%
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Re: Images et texte sur un écran graphique ensemble

Message par Fig »

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
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Images et texte sur un écran graphique ensemble

Message par Micoute »

Un petit bout de code bien sûr

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)
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 !
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 !
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Images et texte sur un écran graphique ensemble

Message par falsam »

Code : Tout sélectionner

ImageGadget(#Image, X,Y,375,93, ImageID(#Image))
Tu ne peux pas avoir un imagegadget qui est comme identification d'image son gadget.

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%
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Images et texte sur un écran graphique ensemble

Message par falsam »

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%
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: Images et texte sur un écran graphique ensemble

Message par MLD »

@falsam
Tu ma devancé :( :wink:
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Images et texte sur un écran graphique ensemble

Message par Micoute »

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 !
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 !
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Re: Images et texte sur un écran graphique ensemble

Message par Fig »

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
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Images et texte sur un écran graphique ensemble

Message par Micoute »

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 !
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Images et texte sur un écran graphique ensemble

Message par falsam »

Fig a écrit :Falsam affiche sur un sprite puis l'affiche mais tu peux évidemment afficher directement sur l'écran ton texte
J'aurais pu effectivement.

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%
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Re: [Résolu] Images et texte sur un écran graphique ensemble

Message par Fig »

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.
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
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: [Résolu] Images et texte sur un écran graphique ensemble

Message par Micoute »

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 !!!
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 !
Répondre