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

提供: MonoBook
ナビゲーションに移動 検索に移動
(ページの作成:「== 概要 == Macに繋がっているディスプレイの物理的な大きさを取得したい。 解像度ではなくミリ単位の物理的な大きさ...」)
 
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]]の変換ケーブルが行方不明なので後日調査する。
  
 
== 関連項目 ==
 
== 関連項目 ==

2016年3月31日 (木) 06:30時点における版

概要

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の変換ケーブルが行方不明なので後日調査する。

関連項目

参考文献