2

我有一个构建分形的简单 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:与其只是对我的帖子投反对票,我更愿意听听对我帖子的批评。它是重复的吗?我很高兴听到我在哪里可以找到答案,已经搜索了几个小时。您需要更多代码吗?乐于提供...

4

1 回答 1

0

Visual Studio 2017 for Mac 支持 macOS/OS X 开发

Visual Studio 2017 for Mac 使您能够为 macOS 构建控制台应用程序和Cocoa(桌面)应用程序。 视觉工作室

也就是说,没有 .NET Winforms 和 WPF。

您可以从这里开始: 使用 Visual Studio for Mac 进行 macOS 开发。

(提示:这是 Xamarin.Mac 指南)

于 2017-11-30T15:02:39.063 回答