Newsgroup: it.comp.lang.visual-basic
Titolo: funzione drawimage

Ciao a tutti,
ho realizzato un programmino che tramite la funzione drawimage sincronizza e ridimensiona delle foto da una cartella ad un'altra e la destinazione è in formato 640xY dove Y dipende dall'altezza della foto originale.
Visto che molto spesso, l'altezza varia ed ho necessità che la dimensione delle foto sia sempre 640x480 senza dover distorcere l'immagine, sapreste dirmi se la funzione drawimage ha la possibilità di inserire una fascia bianca aggiuntiva pari ai pixel mancanti per raggiungere l'altezza di 480px?
 
grazie!


Parliamo di 
VB.NET
, giusto ? (sono un po' arruginito, non ricordo se in VB6 c'era una funzione DrawImage()... )
 
se parliamo di .NET, allora, assumendo che "Immagine1.png" sia più piccola di 648*480, questo la inserisce al centro di una cornice bianca (e di conseguenza, se è 640*Y crea solo le bande sopra e sotto):
 
      Dim sourceBMP As New Drawing.Bitmap("C:\Immagine1.png")
      Dim destBMP As New Drawing.Bitmap(640, 480)
      Dim destGraph As Drawing.Graphics
      Dim destX As Int32
      Dim destY As Int32
 
      destGraph = Drawing.Graphics.FromImage(destBMP)
      destGraph.Clear(Drawing.Color.White)
      destX = Convert.ToInt32((640 - sourceBMP.Width) / 2)
      destY = Convert.ToInt32((480 - sourceBMP.Height) / 2)
      destGraph.DrawImage(sourceBMP, New Point(destX, destY))


Grazie LucaD per la risposta,
 
il codice utilizzato è il seguente:
 
Dim bm As Bitmap
        Dim originalX As Integer
        Dim originalY As Integer
        Dim destinationX As Integer
        Dim destinationY As Integer
        Dim destinationFolder As String
        Dim destinationFileName As String
        bm = New Bitmap(percorsoImmagine)
        originalX = bm.Width
        originalY = bm.Height
        destinationX = 640
        destinationY = CInt((destinationX / originalX) * originalY)
        Dim thumb As New Bitmap(destinationX, destinationY)
        Dim g As Graphics = Graphics.FromImage(thumb)
        g.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
        g.DrawImage(bm, New Rectangle(0, 0, destinationX, destinationY), New Rectangle(0, 0, bm.Width, bm.Height), GraphicsUnit.Pixel)
        g.Dispose()
        destinationFolder = (destinazioneImmagine)
        destinationFileName = "" & System.IO.Path.GetFileNameWithoutExtension(percorsoImmagine)
        thumb.Save(destinationFolder, System.Drawing.Imaging.ImageFormat.Jpeg)
        bm.Dispose()
        thumb.Dispose()
        Return True
 
mentre stavo adattandoci il tuo codice, ho notato che forse la riga seguente possa contenere l'adattamento alla misura 640x480cm ma non so se sostituirla nel primo o secondo new rectangle
 
g.DrawImage(bm, New Rectangle(0, 0, destinationX, destinationY), New Rectangle(0, 0, bm.Width, bm.Height), GraphicsUnit.Pixel)
 
come lo adatto? 
 
inoltre perchè nel tuo codice imposti le dimensioni di output con
 
 destX = Convert.ToInt32((640 - sourceBMP.Width) / 2)
 destY = Convert.ToInt32((480 - sourceBMP.Height) / 2) ??
il valore ottenuto non è negativo o zero visto che le foto di origine hanno dimensione minima di 640x480 ad un max di 4000*3000??
 
 
grazie ancora

 dimensione minima di 640x480 ad un max di 4000*3000??
 
Quel codice non imposta le dimensioni, imposta il punto di origine...
 
Dalla tua premessa mi pareva di aver capito che tu già avessi fatto la riduzione dell'immagine a 640*<Y in proporzione> (come infatti vedo quello nel tuo codice), per cui quelle istruzioni non possono mai generare coordinate negative
 
Servono quindi solo a prendere la tua immagine già scalata e disegnarla al centro di una bitmap fissa 640*480 con sfondo bianco... in questo modo, "riempi" l'immagine bianca con la tua immagine, e tutto quello che non viene sovrapposto va a formare il bordo che volevi.

ok tutto chiaro, 
avevo capito che sourceBMP.width fosse riferito alla dimensione del file di origine in HD e quindi non mi ritrovavo con i calcoli.
appena ho tempo per adattarlo ti faccio sapere come va.
 
grazie ancora!!