-
9-slice scaling
Here is a bit of code to use for 9-slice scaling. For now, all corners must have the same dimensions, but I hope to change that later on.
Code:
Module Extensions
<System.CompilerServices.Extension()> _
Public Sub DrawImage9Scale(ByVal g As Graphics, ByVal img As Image, ByVal dest As Rectangle, ByVal sliceWidth As Integer, ByVal sliceHeight As Integer)
'Draw upper-left
g.DrawImage(img, New Rectangle(dest.X, dest.Y, sliceWidth, sliceHeight), New Rectangle(0, 0, sliceWidth, sliceHeight), GraphicsUnit.Pixel)
'Draw lower-left
g.DrawImage(img, New Rectangle(dest.X, dest.Bottom - sliceHeight, sliceWidth, sliceHeight), New Rectangle(0, img.Height - sliceHeight, sliceWidth, sliceHeight), GraphicsUnit.Pixel)
'Draw upper-right
g.DrawImage(img, New Rectangle(dest.Right - sliceWidth, dest.Y, sliceWidth, sliceHeight), New Rectangle(img.Width - sliceWidth, 0, sliceWidth, sliceHeight), GraphicsUnit.Pixel)
'Draw lower-right
g.DrawImage(img, New Rectangle(dest.Right - sliceWidth, dest.Bottom - sliceHeight, sliceWidth, sliceHeight), New Rectangle(img.Width - sliceWidth, img.Height - sliceHeight, sliceWidth, sliceHeight), GraphicsUnit.Pixel)
'Draw left
g.DrawImage(img, New Rectangle(dest.X, dest.Y + sliceHeight, sliceWidth, dest.Height - sliceHeight * 2), New Rectangle(0, sliceHeight, sliceWidth, img.Height - sliceHeight * 2), GraphicsUnit.Pixel)
'Draw right
g.DrawImage(img, New Rectangle(dest.Right - sliceWidth, dest.Y + sliceHeight, sliceWidth, dest.Height - sliceHeight * 2), New Rectangle(img.Width - sliceWidth, sliceHeight, sliceWidth, img.Height - sliceHeight * 2), GraphicsUnit.Pixel)
'Draw top
g.DrawImage(img, New Rectangle(dest.X + sliceWidth, dest.Y, dest.Width - sliceWidth * 2, sliceHeight), New Rectangle(sliceWidth, 0, img.Width - sliceWidth * 2, sliceHeight), GraphicsUnit.Pixel)
'Draw bottom
g.DrawImage(img, New Rectangle(dest.X + sliceWidth, dest.Bottom - sliceHeight, dest.Width - sliceWidth * 2, sliceHeight), New Rectangle(sliceWidth, img.Height - sliceHeight, img.Width - sliceWidth * 2, sliceHeight), GraphicsUnit.Pixel)
'Draw inner
g.DrawImage(img, New Rectangle(dest.X + sliceWidth, dest.Y + sliceHeight, dest.Width - sliceWidth * 2, dest.Height - sliceHeight * 2), New Rectangle(sliceWidth, sliceHeight, img.Width - sliceWidth * 2, img.Height - sliceHeight * 2), GraphicsUnit.Pixel)
End Sub
End Module
Put this in any Module block. If you are not using VS 2008 or higher, remove the Extension attribute.