9

C#で画面のネイティブ解像度を取得する方法はありますか?

私が尋ねる理由は、いくつかの曲線があり、解像度に関係なく同じように見えることが非常に重要だからです。画面がネイティブ解像度でない場合、以前とは多少異なるように見えるため、その場合の警告を表示したいと思います。

4

4 に答える 4

4

私の経験から、最良の解決策は、モニターのEDIDからその情報を抽出することです。

ネイティブ解像度を取得する方法は、VB6.0 を介して EDID ファイルから接続されたモニターのネイティブ解像度を取得する方法? で回答されています。

54 から始まる 8 バイトから解像度を取得する小さな JavaScript を作成しました。

var dtd = 0;
var edid =  new Uint8Array(8);
var i = 0;

edid[i++] = 0x0E;
edid[i++] = 0x1F;
edid[i++] = 0x00;
edid[i++] = 0x80;
edid[i++] = 0x51;
edid[i++] = 0x00;
edid[i++] = 0x1B;
edid[i++] = 0x30;

var horizontalRes = ((edid[dtd+4] >> 4) << 8) | edid[dtd+2] ;
var verticalRes = ((edid[dtd+7] >> 4) << 8) | edid[dtd+5];
console.log(horizontalRes+", "+verticalRes);

ここにC#バージョンがあります:

    static Point ExtractResolution(byte [] edid)
    {
        const int dtd = 54;
        var horizontalRes = ((edid[dtd + 4] >> 4) << 8) | edid[dtd + 2];
        var verticalRes = ((edid[dtd + 7] >> 4) << 8) | edid[dtd + 5];
        return new Point(horizontalRes, verticalRes);
    }
于 2014-11-20T11:45:53.950 に答える
2

このようなことを試してください:-

GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Width
GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Height

画面の現在の解像度を取得するには、次を使用できます。

Rectangle resolution = Screen.PrimaryScreen.Bounds;

次に、解像度を変更します。

このリンクをチェックしてください。

Screen screen = Screen.PrimaryScreen;
int S_width=screen.Bounds.Width;
int S_height=screen.Bounds.Height;
于 2013-08-12T13:56:33.433 に答える
2

WinFormsでは、次のいずれかを使用できます

var someScreen = Screen.AllScreens[i];
var mainScreen = Screen.PrimaryScreen;

Screen には Bounds (gross) と WorkingArea (net) Rectangle があります。

よく考えてみると、これは現在の解像度を示すだけです。ただし、アスペクト比を本当に知りたいとコメントされているように、それで十分なはずです。

于 2013-08-12T14:00:24.340 に答える