在C#GDI +中模拟320x200分辨率的最佳方法

时间:2014-04-08 04:03:50

标签: c# graphics bitmap gdi+

我正在尝试用C#制作复古游戏引擎。我想使用320x200的分辨率,但屏幕本身不支持,所以我试图决定什么是最有效的模拟方法。我是否创建了一个Bitmap对象,然后使用SetPixel并创建绘制基本形状的方法?然后将图像缩放到屏幕大小。我应该绘制小的Rectangle对象而不是模仿像素吗?您认为最有效的是什么?还有其他想法吗?

2 个答案:

答案 0 :(得分:0)

您可以使用DrawImage对象的Graphics在任意大小的矩形上绘制320x200位图。

首先在图形对象上设置插值模式,可以控制调整大小时图像的绘制方式。不同的插值模式应该会给出不同的视觉效果,您可能会对内置模式之一感到满意,因此您不必提供任何自定义拉伸算法的实现。

另一方面,你考虑过OpenGL / DirectX而不是GDI +吗?

答案 1 :(得分:0)

如果必须使用GDI +,那么让它使用此方法处理缩放可以利用硬件加速(如果可用)而不是绘制到位图中。但是与其他海报一致,有更好的框架可以看看XNA。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        var gameTick = new Timer {Interval = 10};
        gameTick.Tick += (s, e) => BeginInvoke((Action)(Invalidate));
        gameTick.Start();
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        var g = e.Graphics;

        //calculate the scale ratio to fit a 320x200 box in the form
        var width = g.VisibleClipBounds.Width;
        var height = g.VisibleClipBounds.Height;
        var widthRatio = width / 320f;
        var heightRatio = height / 200f;
        var scaleRatio = Math.Min(widthRatio, heightRatio);
        g.ScaleTransform(scaleRatio, scaleRatio);

        //draw a 320x200 rectangle (because of scale transform this always fills form)
        g.FillRectangle(Brushes.Gray, 0, 0, 320, 200);
    }
}