Coucou,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.
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