メインメニューを開く

差分

Xamarin.Mac/ディスプレイの物理サイズを取得する

2,301 バイト追加, 2016年3月31日 (木) 06:27
ページの作成:「== 概要 == Macに繋がっているディスプレイの物理的な大きさを取得したい。 解像度ではなくミリ単位の物理的な大きさ...」
== 概要 ==
[[Mac]]に繋がっている[[ディスプレイ]]の物理的な大きさを取得したい。
[[解像度]]ではなくミリ単位の物理的な大きさ。

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

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

なお、この記事のタイトルに[[Xamarin.Mac]]とあるが、以下は[[MonoMac]]での実装である。
<source lang="csharp">
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);

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

== 関連項目 ==
* [[Xamarin.Mac/スクリーンキャプチャを撮る]]

== 参考文献 ==
{{reflist}}

{{stub}}

[[category:MonoMac]]
[[category:Xamarin.Mac]]
匿名利用者