C# でピクセルをポイントに変換する必要があります。このトピックに関する複雑な説明を見たことがありますが、単純な式を見つけることができないようです. 標準の 96dpi を想定してみましょう。この変換はどのように計算すればよいでしょうか?
12 に答える
1 インチあたり 72 ポイントあります。1 インチあたり 96 ピクセルと仮定するだけで十分な場合、式はかなり単純になります。
ポイント = ピクセル * 72 / 96
を使用して、Windows でディスプレイの構成済みピクセル/インチを取得する方法がありますGetDeviceCaps
。Microsoft には「Developing DPI-Aware Applications」というガイドがあり、「Creating DPI-Aware Fonts」セクションを探してください。
W3C では、ディスプレイの実際の解像度に関係なく、ピクセルの測定値を 1 インチのpx
正確に 1/96と定義しているため、上記の式はすべての Web 作業に適しています。
コードがフォームにある場合は、これを試してください。
Graphics g = this.CreateGraphics();
points = pixels * 72 / g.DpiX;
g.Dispose();
与えられたものから始めます:
- 1インチに72ポイントあります(つまり、ポイントは1インチの1/72です)
- 150dpiに設定されたシステムでは、1インチあたり150ピクセルがあります。
- 1インチ=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
96dpi と仮定するのは大きな間違いです。仮定が正しい場合でも、フォントをスケーリングするオプションもあります。そのため、10pts に設定されたフォントは、実際には 12.5pt (125%) であるかのように表示される場合があります。
WPF は、System.Windows.FontSizeConverter を使用してポイントをピクセルに変換します。FontSizeConverter は System.Windows.LengthConverter を使用します。LengthConverter は係数 1.33333333333333333 を使用して、ポイント (p) からピクセル (x) に変換します: x = p * 1.3333333333333333
System.Drawing.Graphics には、DpiX および DpiY プロパティがあります。DpiX は、水平方向の 1 インチあたりのピクセル数です。DpiY は、垂直方向の 1 インチあたりのピクセル数です。これらを使用して、ポイント (1 インチあたり 72 ポイント) からピクセルに変換します。
例: 14 水平ポイント = (14 * DpiX) / 72 ピクセル
ポイント = (ピクセル / 96) * 標準の XP/Vista/7 マシンでは 72 (工場出荷時のデフォルト)
ポイント = (ピクセル / 72) * OSX を実行している標準の Mac では 72 (工場出荷時のデフォルト)
Windows はデフォルトで 96 dpi (ディスプレイ) で動作します Mac はデフォルトで 72 dpi (ディスプレイ) で動作します
72 POSTSCRIPT ポイント = 1 インチ 12 POSTSCRIPT ポイント = 1 POSTSCRIPT パイカ 6 POSTSCRIPT パイカ = 72 ポイント = 1 インチ
1 ポイント = 1⁄72 インチ = 25.4⁄72 mm = 0.3527 mm
DPI = 1 インチあたりのドット数 PPI = 1 インチあたりのピクセル数 LPI = 1 インチあたりのライン数
測定に em を使用する場合の詳細情報
16px = 1em (通常のテキストのデフォルト) 8em = 16px * 8 ピクセル/16 = em
確かに、この質問全体は次のようになります。
「モニターの水平方向と垂直方向の PPI (Pixels Per Inch) を取得するにはどうすればよいですか?」
1 インチは 72 ポイントです (定義上、「ポイント」は 1/72 インチとして定義され、「パイカ」は 1/72 フィートとして定義されます)。これらの 2 ビットの情報を使用すると、px から pt に簡単に変換できます。
実はそうに違いない
points = pixels * 96 / 72
これは機能します:
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 なのかはわかりませんが、動作します。)