「Xamarin.Mac/ディスプレイの物理サイズを取得する」の版間の差分
ナビゲーションに移動
検索に移動
66行目: | 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のディスプレイで試そうと思ったがDisplayPortとMini DisplayPortの変換ケーブルが行方不明なので後日調査する。