Come da titolo, vorrei una funzione che produca una Bitmap che contenga un'altra Bitmap ruotata di x gradi.
Mi date una mano?![]()
Come da titolo, vorrei una funzione che produca una Bitmap che contenga un'altra Bitmap ruotata di x gradi.
Mi date una mano?![]()
Pietro
prova con una cosa del genere
codice:sub Page_Load dim filename as string dim foto as System.Drawing.Image 'scelgo la bitmap da usare filename = server.mappath( "Esempio.jpg" ) foto = System.Drawing.Image.FromFile( filename ) dim bmp as new system.Drawing.bitmap( foto ) 'misure della bitmap dim myWidth as integer = bmp.Width dim myHeight as integer = bmp.Height 'creo la nuova immagine dim bmpNew as new system.Drawing.bitmap( myWidth * 2, myHeight * 2 ) dim gr as graphics = graphics.fromImage( bmpNew ) 'imposto l'angolo di rotazione dim angolo as single = 45 / ( 180 / Math.PI ) 'calcolo i punti x1,x2,y1,y2 dim x1 as single = myWidth + myWidth * Math.Cos( angolo ) dim y1 as single = myWidth * Math.Sin( angolo ) dim x2 as single = myWidth - myHeight * Math.Sin( angolo ) dim y2 as single = myHeight * Math.Cos( angolo ) 'creo la matrice di punti dim punti() as Point = { New Point( myWidth,0 ), New Point( x1,y1 ), New Point( x2,y2 ) } 'inserisco la bitmap nella nuova immagine gr.DrawImage( foto, punti ) response.contenttype = "image/jpeg" bmpNew.save( response.OutputStream, imageformat.jpeg ) bmpNew.dispose() bmp.dispose() end sub
"...non è detto che sia tardi se non guardi che ora è..."
Ti ringrazio tantissimo della risposta.
La proverò senzaltro domani e ti saprò dire.
Nel frattempo, partendo da un codice simile, ho costruito la mia routine ma, forse la dimenticanza delle formule di trigomometria elementari, è abbastanza incasinata![]()
Se non abuso, ho un altro problema correlato.
L'immagine si ruota per esempio di pi/4 e viene costruita in una bitmap che contiene esattamente il rettangolo originale ruotato per l'appunto di pi/4.
Le zone di contenimento mi piacerebbe che fossero trasparenti, non opache.
Mi puoi dare un'altra mano per favore?![]()
Ciao![]()
Pietro
Finalmente ho potuto provare il codice della rotazione immagine.
Purtroppo non era una questione così semplice, perchè non funziona esattamente come previsto.
Infatti, ruota sì, ma viene pure tagliata.
La soluzione consiste nel pensare all'immagine da ruotare come un rettangolo, individuato da 3 punti, p0, p1 e p2.
Questo rettangolo dovrà essere contenuto in una Bitmap che avrà le dimensioni giuste per contenerlo esattamente. Perciò, in funzione dell'angolo rotazione in radianti di rotazione, e delle dimensioni originali del rettangolo, w e h:
poi, rispetto al vertice superiore sinistro, ricavo x e y dei tre punti p0, p1 e p2, che dipendono dal quadrante di rotazione. Per esempio, per il primo quadrante, angolo tra 0 e 90°codice:Dim h1, w1 As Integer h1 = CInt(Math.Round(Math.Abs(h * Math.Cos(rotazione)) + Math.Abs(w * Math.Sin(rotazione)))) w1 = CInt(Math.Round(Math.Abs(h * Math.Sin(rotazione)) + Math.Abs(w * Math.Cos(rotazione))))
x0 = 0
y0 = CSng(Math.Abs(w * Math.Sin(rotazione)))
'trovo le posizioni di (x1,y1) e (x2,y2)
x1 = Convert.ToSingle(w * Math.Cos(rotazione))
y1 = Convert.ToSingle(0)
x2 = Convert.ToSingle(h * Math.Sin(rotazione))
y2 = Convert.ToSingle(h1)
Per l'altra questione, rendere trasparente il sottofondo del rettangolo che contiene l'immagine ruotata, ho provato a salvare l'immagine in formato png e sembra che vada, mentre non mi va nel formato gif
:master:
Ciao![]()
Pietro