web-dev-qa-db-ja.com

ピクセルをポイントに変換

C#でピクセルをポイントに変換する必要があります。トピックに関する複雑な説明をいくつか見ましたが、単純な式を見つけることができないようです。標準の96dpiを想定して、この変換をどのように計算すればよいですか?

120
Todd Davis

1インチあたり72ポイント ;があります。 1インチあたり96ピクセルと仮定すれば十分な場合、式はかなり単純です。

ポイント=ピクセル* 72/96

GetDeviceCaps を使用して、Windowsのディスプレイの1インチあたりの構成済みピクセルを取得する方法があります。 Microsoftには "DPI対応アプリケーションの開発" というガイドがあります。「DPI対応フォントの作成」セクションを探してください。

W3Cは、ディスプレイの実際の解像度に関係なく、ピクセル測定pxを正確に 1inの1/96 と定義しているため、上記の式はすべてのWeb作業に適しています。

186
Mark Ransom

コードがフォームにある場合、これを試してください:

Graphics g = this.CreateGraphics();
points = pixels * 72 / g.DpiX;
g.Dispose();
56
Hejazi

96dpiが巨大の間違いであると仮定します。仮定が正しい場合でも、フォントを拡大縮小するオプションもあります。したがって、10ポイントのフォントセットは、実際には12.5ポイント(125%)のように表示されます。

24
Joel Coehoorn

与えられたもので始まる:

  • 1インチには72ポイントがあります(つまり、ポイントは1/72インチです)
  • 150dpiに設定されたシステムでは、1インチあたり150ピクセルです。
  • 1 in = 72pt = 150px(150dpi設定の場合)

ピクセル(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
18
Ian Boyd

WPFは、System.Windows.FontSizeConverterを使用してポイントをピクセルに変換します。 FontSizeConverterはSystem.Windows.LengthConverterを使用します。 LengthConverterは係数1.333333333333333333を使用して、ポイント(p)からピクセル(x)に変換します:x = p * 1.3333333333333333

10
Heind

ポイント=(ピクセル/ 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

4
Bubba Tbone

実際には

points = pixels * 96 / 72
4
david

確かにこの質問全体は次のようになります。

「モニターの水平および垂直PPI(インチあたりのピクセル数)を取得するにはどうすればよいですか?」

1インチには72ポイントがあります(定義により、「ポイント」は1/72インチと定義され、同様に「パイカ」は1/72フィートと定義されます)。これらの2ビットの情報を使用すると、pxからptに簡単に変換できます。

4
JeeBee

System.Drawing.GraphicsにはDpiXおよびDpiYプロパティがあります。 DpiXは水平方向の1インチあたりのピクセル数です。 DpiYは垂直方向の1インチあたりのピクセル数です。これらを使用して、ポイント(1インチあたり72ポイント)からピクセルに変換します。

例:14水平ポイント=(14 * DpiX)/ 72ピクセル

4
spotcatbug

これは動作します:

int pixels = (int)((dp) * Resources.System.DisplayMetrics.Density + 0.5f);
1
Michael Zhang