Ridimensionare un'immagine

martedì 06 agosto 2013 - 18.10
Tag Elenco Tags  C#  |  .NET 4.0

svipla Profilo | Senior Member

Ciao a tutti
Ho bisogno di una funzione che mi ridimensioni un'immagine e nel caso una volta ridimensionata che non abbia le dimensioni desiderate deve aggiungere uno sfondo in modo tale da avere le dimensioni richieste.

Ho trovato questo codice:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

ma se passo per esempio un'immagine 630x450 e voglio ridimensionarla a 135px × 163px, l'immagine che ottengo non è centrale ma è spostata sulla destra.
Come posso risolvere?
Grazie mille

gsistemi Profilo | Junior Member

'carico l'immagine originale
dim img, img_bg as System.Drawing.Image
img = System.Drawing.Image.FromFile( "C:\prova.jpg" )

' solo se vuoi un fondo particolare altrimenti lo crea nero
img_bg = System.Drawing.Image.FromFile( "C:\background.jpg" )

' scalo l'immagine
dim w as integer = img.width
dim h as integer = img.height
if ( w / h ) >= ( 100 / 120 ) then
w = cint( 120 * w / h )
h = 120
else
h = cint( h * 100 / w )
w = 100
end if

' calcolo la posizione dell'immagine per centrarla se non è precisa
dim posx as integer = cint( ( w - 100 ) / 2 )
dim posy as integer = cint( ( h - 120 ) / 2 )

'setto i valori per l'immagine nuova (qualità, compressione e colori)
Encoders = myImageCodecInfo(1)
myEncoderParameters = New system.drawing.imaging.EncoderParameters(3)
myEncoderParameters.Param(0) = New system.drawing.imaging.EncoderParameter(system.drawing.imaging.Encoder.ColorDepth, CType(24L, Int32))
myEncoderParameters.Param(1) = New system.drawing.imaging.EncoderParameter(system.drawing.imaging.Encoder.Compression, 0)
myEncoderParameters.Param(2) = New system.drawing.imaging.EncoderParameter(system.drawing.imaging.Encoder.Quality, 80)

'ridimensiono l'immagine originale con le dimensioni che ho calcolato
dim thm as system.drawing.image = img.getthumbnailimage( w, h, nothing, system.intptr.zero )

'creo l'immagine nuova delle dimensioni che mi servono (72F e' la risoluzione DPI)
dim btm as new bitmap( 100, 120 )
dim finale as system.drawing.image = btm
dim grf as system.drawing.graphics
btm.setresolution( 72F, 72F )

'creo la foto finale e la salvo
grf = system.drawing.graphics.fromimage(finale)

'solo se vuoi un fondo particolare
grf.drawimage( img_bg, new rectangle( 0, 0, 100, 120 ), 0, 0, 100, 120, graphicsunit.pixel )

grf.drawimage( thm, new rectangle( 0, 0, 100, 120 ), posx, posy, 100, 120, graphicsunit.pixel )
finale.save( "C:\finale.jpg" )

Ho usato i valori 100x120 per distinguere altezza e larghezza, usa i valori che servono a te.
Spero sia utile, non so se esiste un metodo più facile!
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5