「Xamarin.Mac/ディスプレイの物理サイズを取得する」の版間の差分

提供:MonoBook
ページの作成:「== 概要 == Macに繋がっているディスプレイの物理的な大きさを取得したい。 解像度ではなくミリ単位の物理的な大きさ...」
 
編集の要約なし
 
(他の1人の利用者による、間の1版が非表示)
46行目: 46行目:
             var size = CGDisplay.ScreenSize(displayId.UInt32Value);
             var size = CGDisplay.ScreenSize(displayId.UInt32Value);


             // Thunderbolt Display 27インチでは以下の値が返ってきた。
             // 27インチのThunderbolt Display では以下の値が返ってきた。
             // {Width=596.5505, Height=335.5596}
             // {Width=596.5505, Height=335.5596}
             // 巻尺でディスプレイの大きさを測ってみたところ、上記の単位はミリメートルのようだ。
             // 巻尺でディスプレイの大きさを測ってみたところ上記の単位はミリメートルのようだ。
             Console.WriteLine(size);
             Console.WriteLine(size);
         }
         }
54行目: 54行目:
}
}
</source>
</source>
[[アップル]]謹製の[[Thuderbolt Display]]でしか試していないので他社製品でうまく取得できるかは謎である。
[[EIZO]]のディスプレイで試そうと思ったが[[DisplayPort]]と[[Mini DisplayPort]]の変換ケーブルが行方不明なので後日調査する。


== 関連項目 ==
== 関連項目 ==
63行目: 66行目:
{{stub}}
{{stub}}


[[category:MonoMac]]
[[category: MonoMac]]
[[category:Xamarin.Mac]]
[[category: Xamarin.Mac]]
[[category: Core Graphics]]

2017年6月13日 (火) 01:37時点における最新版

概要[編集 | ソースを編集]

Macに繋がっているディスプレイの物理的な大きさを取得したい。 解像度ではなくミリ単位の物理的な大きさ。

用途としては「写真を実物大で表示してほしい」という要望のために1ピクセルが何ミリかを計算したいのである。 縦横の物理的な大きさがわかれば、あとは解像度で割り算してやることで1ピクセルが何ミリなのかがわかる。

実装[編集 | ソースを編集]

MonoMacにもXamarin.MacにもそんなAPIはみあたらない。 だがCoreGraphicsを直叩きすることでディスプレイの物理的な大きさを取得できるようだ。

なお、この記事のタイトルにXamarin.Macとあるが、以下はMonoMacでの実装である。

using System;
using System.Drawing;
using System.Runtime.InteropServices;
using MonoMac.Foundation;
using MonoMac.AppKit;
using MonoMac.CoreGraphics;

namespace PhysicalDisplaySize
{
    public  static class CGDisplay
    {
        public const string DllName = "/System/Library/Frameworks/CoreGraphics.framework/CoreGraphics";

        [DllImport(DllName)]
        extern static SizeF CGDisplayScreenSize(UInt32 displayId);

        public static SizeF ScreenSize(UInt32 displayId)
        {
            return CGDisplayScreenSize(displayId);
        }
    }

    class MainClass
    {
        static void Main(string[] args)
        {
            NSApplication.Init();

            // ディスプレイIDを取得する
            var displayId = (NSNumber)NSScreen.MainScreen.DeviceDescription["NSScreenNumber"];

            // ディスプレイの物理的な大きさを取得する
            var size = CGDisplay.ScreenSize(displayId.UInt32Value);

            // 27インチのThunderbolt Display では以下の値が返ってきた。
            // {Width=596.5505, Height=335.5596}
            // 巻尺でディスプレイの大きさを測ってみたところ上記の単位はミリメートルのようだ。
            Console.WriteLine(size);
        }
    }
}

アップル謹製のThuderbolt Displayでしか試していないので他社製品でうまく取得できるかは謎である。 EIZOのディスプレイで試そうと思ったがDisplayPortMini DisplayPortの変換ケーブルが行方不明なので後日調査する。

関連項目[編集 | ソースを編集]

参考文献[編集 | ソースを編集]