2

フラクタルを構築する単純な c# コンソール アプリケーションがあります。macOS で Visual Studio Community を使用しています。特定のサイズ (wxh) のビットマップを作成します。.SetPixel計算されたマンデルブロ数に基づいて、ピクセルごとに色が割り当てられます。

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 の Retina 画面を使用していて、ビットマップが非常にピクセル化されていることを除いて、これは正常に機能します。

私は次のようなことを試しました:

        Graphics graphics = this.CreateGraphics();
        dpiX = graphics.DpiX;

dpi を取得しますが、これは画面ではなく の解像度である 96 にFormなります。

bm.SetResolution(144.0F, 144.0F);ビットマップを作成した直後に試しましたが、成功しませんでした。

hereのようなより複雑なアプローチを試みましたが、プログラムがクラッシュするだけです。おそらく(?)私はmacosを使用しているため、.dllのようなロードを提案するすべてのソリューションが機能しませ[DllImport("user32.dll")]System.DllNotFoundException: user32.dll

this.AutoScaleDimensions = new System.Drawing.SizeF(200F, 200F);を初期化するメソッドに追加してみましたForm

WPFに切り替えることでさえも、macOS で可能な場合でも問題があるようです。C# を使用してそれが可能かどうか疑問に思っていますか?

プログラム全体を Retina dpi 用にレンダリングする必要はありませんが、ピクセルごとにビットマップを作成するには、おそらく高解像度の画像を取得するための別のアプローチが必要ですか? ビットマップを単純に小さくすることは許容されますが、解像度は高くなります。もちろん、最もForm優れた解決策は、アプリケーション全体を次のように書き直すことなく、画面で使用可能な dpi に基づいて、高 dpi 解像度で数行のコードを使用して完全なアプリケーションを作成することです。

.NET のドキュメントは本当に役に立たないので、誰かが解決策を持っていることを願っています。

PS: 投稿に反対票を投じるだけでなく、投稿に対する批判を聞きたいと思います。重複ですか?何時間も探し続けてきた答えがどこにあるのかと聞いて嬉しく思います。もっとコードが必要ですか?喜んで提供します...

4

1 に答える 1