C#で画面のネイティブ解像度を取得する方法はありますか?
私が尋ねる理由は、いくつかの曲線があり、解像度に関係なく同じように見えることが非常に重要だからです。画面がネイティブ解像度でない場合、以前とは多少異なるように見えるため、その場合の警告を表示したいと思います。
C#で画面のネイティブ解像度を取得する方法はありますか?
私が尋ねる理由は、いくつかの曲線があり、解像度に関係なく同じように見えることが非常に重要だからです。画面がネイティブ解像度でない場合、以前とは多少異なるように見えるため、その場合の警告を表示したいと思います。
私の経験から、最良の解決策は、モニターの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);
}
このようなことを試してください:-
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;
WinFormsでは、次のいずれかを使用できます
var someScreen = Screen.AllScreens[i];
var mainScreen = Screen.PrimaryScreen;
Screen には Bounds (gross) と WorkingArea (net) Rectangle があります。
よく考えてみると、これは現在の解像度を示すだけです。ただし、アスペクト比を本当に知りたいとコメントされているように、それで十分なはずです。