[英]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.