我有一个构建分形的简单 c# 控制台应用程序。我在 macOS 上使用 Visual Studio Community。我创建了一个特定大小(wxh)的位图。.SetPixel
根据计算的 mandelbrotnumber,为每个像素分配一个颜色。
class Form1 : Form
{
//..
public Form1()
{
//..
AutoScaleMode = AutoScaleMode.Dpi;
}
//..
private void DrawMandelbrot(object o, PaintEventArgs ea)
{
Bitmap bm = new Bitmap(w, h);
mandelb = CreateMandelbrot(bm);
ea.Graphics.DrawImage(mandelb, xMandelb, yMandelb, w, h);
}
}
这很好用,除了我有一个高 dpi 的视网膜屏幕并且位图看起来非常像素化。
我试过这样的事情:
Graphics graphics = this.CreateGraphics();
dpiX = graphics.DpiX;
得到一个dpi,但这只是给我96,这是分辨率,而Form
不是屏幕。
我在创建位图后直接尝试bm.SetResolution(144.0F, 144.0F);
,没有成功。
我尝试了更复杂的方法,比如在这里找到的,但这只会使程序崩溃。可能(?)因为我在 macos 上,所有推荐的建议加载 .dll 的解决方案都[DllImport("user32.dll")]
不起作用:System.DllNotFoundException: user32.dll
。
我尝试添加this.AutoScaleDimensions = new System.Drawing.SizeF(200F, 200F);
到初始化Form
.
即使切换到WPF似乎也是有问题的,如果在 macOS 上什至可能的话。想知道是否有可能使用 C#?
我不需要整个程序来渲染视网膜 dpi,但是逐像素创建位图可能需要另一种方法来获得高分辨率图像?简单地使位图更小,但分辨率更高是可以接受的。当然,最好的解决方案是Form
根据屏幕的可用 dpi 在高 dpi 分辨率下使用几行代码创建完整的应用程序,而无需将整个应用程序重写为
.NET文档真的没用,所以希望这里有人有解决方案。
PS:与其只是对我的帖子投反对票,我更愿意听听对我帖子的批评。它是重复的吗?我很高兴听到我在哪里可以找到答案,已经搜索了几个小时。您需要更多代码吗?乐于提供...