Puedes crear una subclase de un Picture, Canvas o cualquier otra clase y escribir el código que las permita centrar otras imágenes en sus respectivos contextos gráficos; pero mediante el enfoque de Extensión de Clase podrás reutilizar el mismo código para cualquiera clase que ofrezca un contexto gráfico (o cualquier otra clase futura), de modo que sólo tendrás que pasar como parámetro la instancia de Picture que deseas centrar y re-escalar (en caso necesario).
Seguramente ya sepas que, para crear un Método de Extensión de Clase, debes de añadir un nuevo método a un Módulo; de modo que puedes crear, por ejemplo, un nuevo Módulo con el nombre “ExtensionesGraphics”.
A continuación, añade un nuevo método en dicho módulo con la siguiente signatura:
- Nombre: CenterPicture
- Parámetros: Extends g As Graphics, Image As Picture
- Ámbito: Global
Y el código encargado de situar y escalar la imagen recibida en el área del contexto gráfico:
If Not (image Is Nil) Then Var Height, Width As Integer Var SourceY, SourceX As Integer = 0 If image.Width <= g.Width And image.Height <= g.Height Then Width = image.Width Height = image.Height Else If g.Width >= g.Height And image.Width >= image.Height Then Width = g.Width Height = (Image.Height * Width) / image.Width If Height > g.Height Then Height = g.Height Width = (image.Width*Height)/image.Height End If Elseif g.Width >= g.Height And image.Width <= image.Height Then Height = g.Height Width = (image.Width * Height) / image.Height Elseif g.Width <= g.Height And image.Width >= image.Height Then Width = g.Width Height = (image.Height * Width) / image.Width Elseif g.Width <= g.Height And image.Width <= image.Height Then Height = g.Height Width = (image.Width*Height)/image.Height If Width > g.Width Then Width = g.Width Height = (image.Height*Width)/image.Width End If End If End If sourcex = (g.Width/2) - (Width/2) sourcey = (g.Height/2) - (Height/2) g.DrawPicture(image,sourcex,sourcey,Width,Height,0,0,image.Width,Image.Height) End If
¡Y eso es todo!
A partir de ahora, podrás llamar a dicho método desde el Manejador de Evento Paint de una instancia Canvas o desde el contexto Graphics de cualquier otro Picture usando:
g.CenterPicture(mImage) // mImage es una instancia válida de un Picture
Por supuesto, puedes añadir otras extensiones de clase que consideres útiles en tu módulo de Graphics.