Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116

    produrre una Bitmap dalla rotazione di un'altra

    Come da titolo, vorrei una funzione che produca una Bitmap che contenga un'altra Bitmap ruotata di x gradi.
    Mi date una mano?
    Pietro

  2. #2
    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 è..."

  3. #3
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    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

  4. #4
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    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:
    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))))
    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°

    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

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.