First of all, I must apologise because the extension method I'm going to show you is C#, but it shouldn't be too hard for you to convert it into VB.
public static RenderTargetBitmap RenderBitmap(this Visual visualToRender)
{
double scale = 600 / 96;
RenderTargetBitmap bmp = new RenderTargetBitmap
(
(int)(scale * (visualToRender.ActualWidth + 1)),
(int)(scale * (visualToRender.ActualHeight + 1)),
scale * 96,
scale * 96,
PixelFormats.Default
);
bmp.Render(visualToRender);
return bmp;
}
[Edit]The OP cannot use this code sample because he needs to scale the image again, and the process is slow.
The issue you have here is that RenderTargetBitmap does not use hardware rendering. It is entirely software rendered, hence the reason that it is prohibitively slow to render (this also counts to explain why the quality is reduced). If you could bear to introduce an external resource into your application, you could use SlimDX (a free DirectX wrapper) to render the viewport from your application.