C#でピクセルをポイントに変換する必要があります。トピックに関する複雑な説明をいくつか見ましたが、単純な式を見つけることができないようです。標準の96dpiを想定して、この変換をどのように計算すればよいですか?
1インチあたり72ポイント ;があります。 1インチあたり96ピクセルと仮定すれば十分な場合、式はかなり単純です。
ポイント=ピクセル* 72/96
GetDeviceCaps
を使用して、Windowsのディスプレイの1インチあたりの構成済みピクセルを取得する方法があります。 Microsoftには "DPI対応アプリケーションの開発" というガイドがあります。「DPI対応フォントの作成」セクションを探してください。
W3Cは、ディスプレイの実際の解像度に関係なく、ピクセル測定px
を正確に 1inの1/96 と定義しているため、上記の式はすべてのWeb作業に適しています。
コードがフォームにある場合、これを試してください:
Graphics g = this.CreateGraphics();
points = pixels * 72 / g.DpiX;
g.Dispose();
96dpiが巨大の間違いであると仮定します。仮定が正しい場合でも、フォントを拡大縮小するオプションもあります。したがって、10ポイントのフォントセットは、実際には12.5ポイント(125%)のように表示されます。
与えられたもので始まる:
ピクセル(px)に基づいてポイント(pt)を検索する場合:
72 pt x pt
------ = ----- (1) for 150dpi system
150 px y px
再配置:
x = (y/150) * 72 (2) for 150dpi system
そう:
points = (pixels / 150) * 72 (3) for 150dpi system
WPFは、System.Windows.FontSizeConverterを使用してポイントをピクセルに変換します。 FontSizeConverterはSystem.Windows.LengthConverterを使用します。 LengthConverterは係数1.333333333333333333を使用して、ポイント(p)からピクセル(x)に変換します:x = p * 1.3333333333333333
ポイント=(ピクセル/ 96)*標準XP/Vista/7マシンでは72(工場出荷時のデフォルト)
ポイント=(ピクセル/ 72)* OSXを実行する標準Macの場合は72(工場出荷時のデフォルト)
Windowsはデフォルトとして96dpi(ディスプレイ)で実行されますMacはデフォルトとして72 dpi(ディスプレイ)で実行されます
72 POSTSCRIPTポイント= 1インチ12 POSTSCRIPTポイント= 1 POSTSCRIPT Pica 6 POSTSCRIPT Picas = 72ポイント= 1インチ
1ポイント= 1⁄72インチ= 25.4⁄72 mm = 0.3527 mm
DPI =インチあたりのドット数PPI =インチあたりのピクセル数LPI =インチあたりの線数
Emを測定として使用する場合の詳細情報
16px = 1em(通常のテキストのデフォルト)8em = 16px * 8ピクセル/ 16 = em
実際には
points = pixels * 96 / 72
確かにこの質問全体は次のようになります。
「モニターの水平および垂直PPI(インチあたりのピクセル数)を取得するにはどうすればよいですか?」
1インチには72ポイントがあります(定義により、「ポイント」は1/72インチと定義され、同様に「パイカ」は1/72フィートと定義されます)。これらの2ビットの情報を使用すると、pxからptに簡単に変換できます。
System.Drawing.GraphicsにはDpiXおよびDpiYプロパティがあります。 DpiXは水平方向の1インチあたりのピクセル数です。 DpiYは垂直方向の1インチあたりのピクセル数です。これらを使用して、ポイント(1インチあたり72ポイント)からピクセルに変換します。
例:14水平ポイント=(14 * DpiX)/ 72ピクセル
これは動作します:
int pixels = (int)((dp) * Resources.System.DisplayMetrics.Density + 0.5f);