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.