Comment Faire une rotation d'un Texte en son centre

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Torp
Messages : 360
Inscription : lun. 22/nov./2004 13:05

Re: Comment Faire une rotation d'un Texte en son centre

Message par Torp »

djes a écrit :Il suffit de ralentir pour comprendre pourquoi (code ci-dessous). Il semble que le calcul de la position des lettres ne se fait pas au sous-pixel, et donc, ça saute de pixel en pixel. Pour éviter ça, soit on change la résolution de sortie (et on réduit après), soit on dessine le texte une fois sur une image et on tourne l'image.
Coucou,
Il semblerait que ce soit DrawVectorParagraph() qui a un pose problème (peut être par soucis de rapidité d'affichage), car le phénomène disparait avec DrawVectorText().

Code : Tout sélectionner

Enumeration
  #Window
  #Canvas
  #Refresh
EndEnumeration

Procedure DrawCenterRotatedText(Gadget,Text$,Angle.f,BackColor,ForeColor)
 
  StartVectorDrawing(CanvasVectorOutput(Gadget))
  Protected outWidth = VectorOutputWidth(), outHeight = VectorOutputHeight()
 
  VectorSourceColor(BackColor)
  FillVectorOutput()
   
  VectorFont(LoadFont(0,"Verdana",20))
  VectorSourceColor(ForeColor)
 
  RotateCoordinates(outWidth/2,outHeight/2,Angle);,#PB_Coordinate_Source)

  MovePathCursor(outWidth/2 - VectorTextWidth(Text$)/2, outHeight/2 - VectorTextHeight(Text$)/2)
  DrawVectorText(Text$)
  
  VectorSourceColor(RGBA(200,220,255,120))
  For i=0 To outWidth Step 20
    MovePathCursor(i,0)
    AddPathLine(i,outHeight)
  Next
  For i=0 To outHeight Step 20
    MovePathCursor(0,i)
    AddPathLine(outWidth,i)
  Next
 
  DashPath(2, 20)

  StopVectorDrawing()
EndProcedure

OpenWindow(#Window,0,0,400,400,"Rotation de texte VectorDrawing",#PB_Window_ScreenCentered | #PB_Window_SizeGadget | #PB_Window_MaximizeGadget | #PB_Window_MinimizeGadget)

CanvasGadget(#Canvas,0,0,400,400)
AddWindowTimer(#Window,#Refresh,50)

Repeat
  event = WaitWindowEvent()
 
  Select event
    Case #PB_Event_Timer
      If EventTimer() = #Refresh
        i.f +0.1
        DrawCenterRotatedText(#Canvas,"Ce texte tourne",i,RGBA(0,100,180,255),RGBA(255,255,255,255))
      EndIf
     
    Case #PB_Event_SizeWindow
      ResizeGadget(#Canvas,0,0,WindowWidth(#Window),WindowHeight(#Window))
  EndSelect
 
Until event = #PB_Event_CloseWindow
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Comment Faire une rotation d'un Texte en son centre

Message par Kwai chang caine »

Exact....marche nickel ici avec W10
C'est parfait comme effet, merci 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Re: Comment Faire une rotation d'un Texte en son centre

Message par Shadow »

Effectivement, fonctionne très bien là.
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Comment Faire une rotation d'un Texte en son centre

Message par djes »

Ah ok! :)
Répondre