To fix the problem, you need to multiply the x and y positions of your sprites by the texture width divided by the the new height.
Private Sprites As New Queue
Private Structure Sprite_Type
Dim tex As Texture
Dim x, y, width, height As Integer
Dim c As Color
Public Sub Draw_Sprites()
If Sprites.Count = 0 Then Return
Dim s As New Sprite(VideoDevice)
While Sprites.Count > 0
Dim sp As Sprite_Type = DirectCast(Sprites.Dequeue, Sprite_Type)
Dim xmult As Single = sp.tex.GetSurfaceLevel(0).Description.Width / sp.width
Dim ymult As Single = sp.tex.GetSurfaceLevel(0).Description.Height / sp.height
s.Draw2D(sp.tex, Rectangle.Empty, New Rectangle(sp.x, sp.y, sp.width, sp.height), New Point(0, 0), 0, New Point(sp.x * xmult, sp.y * ymult), sp.c)
I know that my code isn't following the .NET Framework Naming Guidelines. This is merely a test app that I'm throwing together to make sure that I can work out my rendering issues before I go full-bore into my next project.