簡體   English   中英

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

[英]Best way to emulate 320x200 resolution in C# GDI+

我正在嘗試使用C#制作復古游戲引擎。 我想使用320x200的分辨率,但屏幕本身不支持該分辨率,因此我試圖確定哪種是最有效的模擬方法。 我是否創建一個Bitmap對象,然后使用SetPixel並創建用於繪制基本形狀的方法? 然后將圖像縮放到屏幕大小。 我應該畫些矩形對象來模仿像素嗎? 您認為最有效的是什么? 還有其他想法嗎?

您可以只使用Graphics對象的DrawImage在任意大小的矩形上繪制320x200位圖。

通過首先在圖形對象上設置插值模式,可以控制調整大小后繪制圖像的方式。 不同的插值模式應提供不同的視覺效果,並且您將對內置模式之一感到滿意,因此您不必提供streching算法的任何自定義實現。

另一方面,您是否考慮過OpenGL / DirectX而不是GDI +?

如果必須使用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);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM