Curvare la linea di testo in un oggetto Image
Vai alla navigazione
Vai alla ricerca
Una soluzione per ottenere un testo curvato lungo una ideale circonferenza, potrebbe essere quella di creare tante piccoli oggetti di tipo Image per quante sono le lettere alfabetiche o le sillabe.
Ciascuna lettera o sillaba verrebbe quindi disegnata in uno di quegli oggetti Image.
Infine tali oggetti Image verrebbero adeguatamente ruotati in modo perpendicolare al raggio della circonferenza (o dell'arco) e disegnati/fusi in un Oggetto Image principale più grande, per formare il testo completo e apparentemente curvato.
Mostriamo un esempio pratico:
Private Const CURVATURA As Float = 8.0
Public Sub Form_Open()
Dim pb As PictureBox
Dim testo As String
Dim fo As Font
Dim an As Float
Dim ii As Image[]
Dim b As Byte
Dim i, im As Image
Dim x, y, x_a, y_o, r As Short
Me.Show
With Me
.Center
.W = 600
.H = 600
.Arrangement = Arrange.Fill
End With
With pb = New PictureBox(Me)
.X = 0
.Y = 0
End With
' Imposta il testo da disegnare:
testo = "Questo e' un testo qualsiasi"
' Imposta il punto (sulla base dei gradi) della circonferenza da dove cominciare (in senso orario) a disegnare le lettere:
an = 270.0
ii = New Image[]
For b = 1 To Len(testo)
' Definisce le dimensioni dell'immagine, che conterrà la lettera alfabetica, dalle specificità del carattere:
With fo = New Font
' Crea un oggetto "Image" per contenere il disegno di una lettera alfabetica:
i = New Image(.TextWidth(Mid(testo, b, 1)), .TextHeight(Mid(testo, b, 1)), Color.Transparent, gb.Standard)
End With
With Paint
.Begin(i)
.DrawText(Mid(testo, b, 1), 0, 0, i.W, i.H, Align.Normal)
.End
End With
i = i.Rotate(Rad(-an))
ii.Push(i)
an += CURVATURA
Next
x_a = pb.W / 2 ' Rappresenta la distanza X dal punto 0 (angolo in alto a sinistra) dell'Image principale
y_o = pb.H / 2 ' Rappresenta la distanza Y dal punto 0 (angolo in alto a sinistra) dell'Image principale
r = 200 ' Rappresenta la lunghezza del raggio (la distanza di ogni immagine-lettera dal centro)
' Crea l'Oggetto "Image" ove saranno disegnate le singole immagini dei caratteri per ricreare il testo ruotato:
im = New Image(pb.W, pb.H, Color.Yellow, gb.Standard)
' Imposta il punto (sulla base dei gradi) della circonferenza da dove cominciare (in senso orario) a disegnare le singole Image nella Image "im" superficie principale:
an = 180
For b = 0 To ii.Max
' Imposta la curvatura delle singole Image dei caratteri:
x = x_a + r * Cos(Rad(an))
y = y_o + r * Sin(Rad(an))
With Paint
.Begin(im)
.DrawImage(ii[b], x, y, ii[b].W, ii[b].H, 1.0, Null)
.End
End With
' Imposta la distanza delle singole immagini dei caratteri fra esse:
an += CURVATURA
Next
pb.Image = im
End