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


125

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

回答:


198

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

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

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

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


26
1インチあたり72ポイントは議論の余地のあるアイテムではありません。
ミッチェルセラーズ

11
@David dpiはディスプレイに依存し、ppiは表記上の定数です
Corey Ross

3
@Davidの記事では、モニターのDPIが可変である理由を説明しています。PPIは同じです。1マイルのキロメートル数は、運転する車によって変わりません。一般的に96dpiを想定することは良い考えではありませんが、そうする場合、与えられた式は正しいものです。
クエンティン

13
通常、PPIは1インチあたりのピクセル数ではなく、1インチあたりのピクセル数の略語です。おそらくそれが混乱の原因ですか?1インチあたりのポイントは常に72です。リンクXetiusをありがとう。
マークランサム

@Corey Ross:実際、DPIはプリンターに依存していますが、PPIはモニターに依存しています。しかし、だれもが誤ってPPI DPIと呼んでいます...
Stefan Steiger

58

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

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

2
DpiXは幅に使用され、高さにはDpiYを使用する必要があることに注意してください。
PandaWood 2016

25

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


23

以下で始まる:

  • 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

1
最初の式の解像度はピクセルでなければなりません-用語のキャンセルのために、私たちは150dpiシステムのための前提(1)持っているので、
ジェイソンS

9

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


この値が使用される理由も説明してください...偶然にも、それは96 dpi(ディスプレイのウィンドウのデフォルトDPI)/ 72 dpi(ポイントが定義されているDPI)です。
QUITあり-Anony-Mousse

5

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

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


4

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

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

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


さらに複雑にするために、私はPDFに変換されているReporting Services(RDL)レポートの配置を処理しています。1日の終わりに、一体誰がDPIが何であるかを知っていますか?私は私の推測を使用しています。:)
トッド・デービス

「モニターの水平および垂直DPIを取得するにはどうすればよいですか」という意味です。PPIは72の定数です。常にそうであり続けます。
Xetius

1
1インチあたりのピクセル数(Pica)ではなく、1インチあたりのピクセル数。
JeeBee 2009

1
ええと、おっと、ピカではありません!それは1/6インチです。1インチあたりのポイントは冗長で、用語は「ポイント」です。「ポイント」は1/72インチです。
JeeBee、2009

4

実際には

points = pixels * 96 / 72

1
96dpiおよび72ppi(ポイント/インチ)を推定している場合、これは正しくありません。ポイント=ピクセル*
Jason S

4

ポイント=(ピクセル/ 96)*標準のXP / Vista / 7マシンでは72(工場出荷時のデフォルト)

ポイント=(ピクセル/ 72)* OSXを実行している標準のMacでは72(工場出荷時のデフォルト)

Windowsはデフォルトで96 dpi(ディスプレイ)で動作しますMacはデフォルトで72 dpi(ディスプレイ)で動作します

72 POSTSCRIPTポイント= 1インチ12 POSTSCRIPTポイント= 1 POSTSCRIPT Pica 6 POSTSCRIPTパイカ= 72ポイント= 1インチ

1ポイント= 1⁄72インチ= 25.4⁄72 mm = 0.3527 mm

DPI =ドット/インチPPI =ピクセル/インチLPI =ライン/インチ

測定にemを使用する場合の詳細情報

16px = 1em(通常のテキストのデフォルト)8em = 16px * 8ピクセル/ 16 = em



0

MacでwxPythonを使用して、次のように正しいDPIを取得します。

    from wx import ScreenDC
    from wx import Size

    size: Size = ScreenDC().GetPPI()
    print(f'x-DPI: {size.GetWidth()} y-DPI: {size.GetHeight()}')

これにより、

x-DPI:72 y-DPI:72

したがって、式は次のとおりです。

ポイント:int =(pixelNumber * 72)// 72


-1

ポイントとピクセルに変換された高さの線(自分の数式)。次に、行の高さフィールドに213.67ポイントを手動で入力する例を示します。

213.67  Manual Entry    
  0.45  Add 0.45    
214.12  Subtotal    
213.75  Round to a multiple of 0.75 
213.00  Subtract 0.75 provides manual entry converted by Excel  
284.00  Divide by 0.75 gives the number of pixels of height

ここでは、手動で213.67ポイントを入力すると284ピクセルになります。
ここでは、手動で213.68ポイントを入力すると、285ピクセルになります。

(なぜ0.45ですか?わかりませんが、うまくいきます。)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.