Credo che questo sia l'effetto di PictureBoxSizeMode.Zoom
. La documentazione dice che:
La dimensione dell'immagine viene aumentata o diminuita mantenendo il rapporto di formato.
Si imposta questo sulla proprietà PictureBox.SizeMode
. Nella sezione "Note" della documentazione relativa a tale funzione viene inoltre indicato:
L'utilizzo del valore Zoom fa sì che l'immagine sia allungata o ridotta per adattarsi alla PictureBox; tuttavia, le proporzioni dell'originale vengono mantenute.
È possibile, naturalmente, impostare la proprietà PictureBox.SizeMode
sia nel progettista finestra Proprietà o nel codice (ad esempio, nel costruttore del modulo):
myPictureBox.SizeMode = PictureBoxSizeMode.Zoom;
Se questo non fa esattamente quello che vuoi, potresti sempre implementare la logica di ridimensionamento da solo. La tua preoccupazione è che ricreare l'immagine nella memoria ogni volta che il controllo viene ridimensionato "sembra una cattiva idea", ma non sono sicuro del motivo per cui sembra così. L'unico problema sarebbe se non fossi attento a distruggere oggetti grafici inutilizzati, come il vecchio Bitmap
. Non solo questi oggetti contengono risorse non gestite che devono essere liberate, inizierai a esercitare enormi quantità di pressione sulla memoria se le lascerai perdere.
In alternativa, per evitare la creazione di bitmap temporanei, è possibile eseguire ciò che il controllo PictureBox probabilmente esegue internamente e utilizzare il metodo Graphics.DrawImage
per gestire lo stretching. Se si passa un rettangolo, esso ridimensiona automaticamente l'immagine per adattarla all'interno del rettangolo.
fonte
2013-03-20 21:24:33
Grazie, in qualche modo ho perso completamente l'impostazione "Zoom".Questo fa esattamente quello che voglio, anche se è bello conoscere gli interni che hai spiegato, specialmente Graphics.DrawImage - Potrei averne uno in futuro ... – Jon