質問

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

役に立ちましたか?

解決

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

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

GetDeviceCaps 。 Microsoftには、" DPI対応アプリケーションの開発" というガイドがあります。 「DPI対応フォントの作成」セクションのセクション。

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

他のヒント

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

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

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

指定されたものから開始:

  • 1インチに72ポイント(つまり、1インチの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

so:

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

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

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

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

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

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

実際にはそうでなければなりません

points = pixels * 96 / 72

ポイント=(ピクセル/ 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 = 1インチあたりの線数

測定としてemを使用する場合の詳細情報

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

これは動作します:

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

高さの線がポイントとピクセルに変換されます(自分の式)。 行の高さフィールドに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なのかわかりませんが、動作します。)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top