問題タブ [dpi]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
winforms - .NET WinForms アプリでフォント DPI を制御する方法
中小企業向けのアプリを作成しました。オフィスの一部の従業員は、フォームを正しく見ることができません。その理由は、DPI 設定が 96dpi 以上に設定されているためです。これを制御する方法を知っている人はいますか?
Winforms アプリを使用した経験のあるすべての人にとって、フォーム レイアウトを制御して、DPI がアプリケーションの外観に影響を与えないようにするにはどうすればよいでしょうか?
.net - DPI とデフォルト フォントの変更のサポート
そのため、フォームの AutoScaleMode プロパティが、作業中の開発マシンとは異なるフォントまたはDPIを備えたシステムをサポートするのにどのように役立つかを理解しようとしています。
SDK から:
AutoScaleMode 列挙体
public enum AutoScaleMode
デフォルトでは、.NET 2.0 フォームは AutoScaleMode.Font を使用します。
そこで、Windows XP、Tahoma 8 ポイント、96 DPI の開発マシンでサンプル フォームをデザインしました。それから私はそれを試してみました
- 14 pt Segoe UI 96 DPI マシン
- 14 pt Segoe UI 150 DPI マシン
このスクリーンショットでわかるように、結果は有望ではありませんでした。
AutoScaleMode プロパティは、さまざまなフォントまたは DPI 設定をサポートするために .NET フォームを有効にするようには設計されていません。では、さまざまなフォントと DPI 設定をサポートする適切な方法は何ですか?
.net - Graphics.MeasureString は、Win32 GetTextExtent とは異なる値を返します
文字列のサイズを測定する方法を C# で見つけようとしています。Win32 で文字列を測定する標準的な方法は、GetTextExtent を使用することです。本当の目標は、フォント文字の平均幅と高さを見つけることです。文字の平均幅を求める標準的な方法は、すべてのアルファベット文字の幅を取得し、52 で割ることから始まります。
Microsoft には、特定の DPI 設定でのいくつかのフォント サイズの平均文字幅をリストしたページがあり、GetTextExtent への私自身の呼び出しによってそれらを確認しました。
- タホマ 8pt、96dpi: 13x6 ピクセル
- タホマ 9pt、96dpi: 14x7 ピクセル
- Segoe UI 9pt、96dpi : 15x7 ピクセル
今、.NET WinForms で同じ計算を実行したいと考えています。Graphics.MeasureString() を使用して、コードを思いつきます:
残念ながら、値は既知の受け入れられている真の値と一致しません。
- タホマ 8pt、96dpi: 14x6 ピクセル(14.21x6.09 ピクセル)
- タホマ 9pt、96dpi: 16x7 ピクセル(15.98x6.85 ピクセル)
- Segoe UI 9pt、96dpi: 17x7 ピクセル(17.46x6.91 ピクセル)
平均的な文字幅は問題ありませんが、文字の高さが約 13% 大きすぎます。余分な高さは、アセンダーとディセンダーを含むように変更された高さの分類の違いによるものだと思います。測定ストリングが高すぎる場合は、次のように変更してみました。
に
弦の高さがそれほど高くないので、測定された高さは短くなるはずです。いいえ、アセンダーとディセンダーを含む文字列のバージョンとまったく同じ高さを返します(ただし、平均幅はわずかに大きくなります)。
これの原因は何ですか? また、GetTextExtent によって返される受け入れられた値と一致するように、テキストの平均高さに対して何ができるか、平均文字高さを取得できますか?
注: 文字の平均高さを取得する標準的な方法は GetTextMetrics を使用することですが、GetTextExtents によって返される高さは同じ値を返します。
java - Java で dpi メタデータを jpeg 画像に書き込む
Java で jpeg 画像の dpi メタデータをプログラムで設定しようとしています。画像のソースはスキャナーなので、TWAIN から水平/垂直解像度と画像の生データを取得します。より良い印刷結果を得るために、この情報を保存したいと思います。
ここに私がこれまで持っているコードがあります。生の画像 (byteArray) を JPEG ファイルに保存しますが、IIOMetadata で指定した X/Y 密度情報は無視します。私が間違っていることについてアドバイスはありますか?
他のソリューション (サードパーティ ライブラリなど) も歓迎します。
ありがとう!
javascript - JS/CSS からシステム DPI/PPI を検出していますか?
表示されるデバイスに応じて特定の解像度で画像を生成する必要がある、一種のユニークなアプリに取り組んでいます。そのため、通常の Windows ブラウザー (96ppi)、iPhone (163ppi)、Android G1 (180ppi)、およびその他のデバイスでは出力が異なります。これを自動的に検出する方法があるかどうか疑問に思っています。
私の最初の調査ではノーと言っているようです。私が見た唯一の提案は、幅が CSS で「1in」と指定されている要素を作成し、その offsetWidth を確認することです ( javascript を介して画面表示の DPI 設定にアクセスする方法も参照してください)。理にかなっていますが、iPhone は 96ppi だと嘘をついています。
別のアプローチは、ディスプレイの寸法をインチで取得し、ピクセル単位の幅で割ることですが、その方法もわかりません。
image - 画像 DPI の説明
DPI の定義を書こうとすると、次のことがわかりました。
DPI (ドット)、PPI (ポイント)、LPI (線) はすべて、以降 DPI と呼ばれる同じ概念を指します。
DPI はデバイスに依存する測定値です。「これがこのデバイスの解像度です」と表示されます。
ベクターベースのファイルは、1 つの DPI に関連付けられていません (特定の解像度に準拠するように拡張および縮小します)。
そのベクターベースのファイルが「ビットマップ」ベースの形式(bmp、png、tiff、jpg)などにレンダリングされると、「バンディング」またはその特定の DPI で出力する「スキャンライン」ベースのデバイス。
現在、「ビットマップ」ベースのファイルには DPI が存在しないと主張する人もいます。
DPI の定義を探していますが、ビットマップ イメージに存在しないと見なされる方法または理由を教えてください。
delphi - 高解像度の画面で、非標準/高コントラストの配色でテストしますか?
ほとんどのマシンでデフォルト以外の Windows 配色を使用しており、Windows が設定されている 124 DPI 画面のラップトップを使用しています。
私がテストした、または毎日使用している多くのプログラムには、標準外のサイズのコントロール、切り取られた UI 要素、判読できないテキストなどを表示するなどの問題があるようです。少しうるさいものから(ほとんど)使用できないものまで、さまざまな範囲があります。
今では、これらの問題の多くは不必要だと感じています。いくつかの配色で高解像度画面で簡単なテストを実行すると、それらが表示されます。そのうちのいくつかは、非常に簡単に修正できます (clWhite、clBlack、および clSilver の代わりに常に clWindow、clWindowText、および clBtnFace を使用するなど)。それらのいくつかは、適切なコントロールのサイジングなど、より困難です。
私の質問は: システムの色、UI 要素のサイズと間隔、フォントのサイズとフォントに関する UI ガイドラインの推奨事項に従うようにしていますか? それらへの準拠をテストすることは、QA プロセスの一部ですか? ほとんどの IDE (私の場合は Delphi) にはピクセル指向のデザイナーがいますが、ピクセルではなくダイアログ単位でフォームをレイアウトしようとしますか?
[編集]: 寝てからこれを読み直すと、この質問は実りのない議論への招待のように見えるかもしれないことに気付きました. そういう意味ではなく、UI インターフェイスのガイドラインに準拠したアプリケーションを作成するのに役立つツールに興味があることは間違いありません。これは、Delphi が私を少し失望させていると感じている領域です。私自身の答えも参照してください。
c# - C#WPF解像度の独立性?
C# を使用して WPF でマップ コントロールを開発しています。たとえば、2,000mx 1,000m のマップ領域が割り当てられた 400 x 200 などのキャンバス コントロールを使用しています。
マップの縮尺は canvas_size_in_meters / real_size_in_metersになります。
canvas_size_in_meters を見つけたいです。
canvas.ActualWidth は、DIU (デバイスに依存しない単位) で幅を示します。したがって、400 DIUは 400/96 = 4.17 インチであり、私のモニターの物理解像度が 96 dpi の場合です。
ただし、定規を使用して、モニターの物理解像度が 87 dpi であることを確認しました。(実際に 96 物理 dpi を備えているモニターはほとんどありません)
その DPI の違い (10%) は、画面上の実際のマップ コントロール幅の +10% の違いに変換されます。
画面解像度や DPI 設定に関係なく、WPF コントロールのサイズをインチ単位で正確に測定するにはどうすればよいですか?
wpf - WPF:ダイアログユニットでユニットを指定する方法は?
適切なダイアログ ユニット(DLU)を使用して、WPF で単純なダイアログをレイアウトする方法を見つけようとしています。
ダイアログユニットとは?
ダイアログは、ユーザーの好みのフォント サイズに基づく測定単位です。ダイアログ単位は、平均文字が幅 4 ダイアログ単位、高さ 8 ダイアログ単位になるように定義されます。
これは、ダイアログ ユニットが次のことを意味します。
- 選択したフォントで変更
- 選択した DPI 設定で変更
- 正方形ではありません
さまざまなdlu測定値を使用して、Windows Vista のこのサンプル ダイアログ ボックスの寸法を約 2 時間かけて測定しました。このダイアログ ボックスを生成する対応する XAML マークアップを教えてください。
(画像リンク)
確かに、私は WPF XAML についてほとんど何も知りません。コントロールを配置する方法がわからないため、開始するたびに困惑します。WPF のすべてが何らかのパネルに含まれている必要があるようです。StackPanels、FlowPanels、DockPanel、Gridなどがあります。これらのいずれかがないと、コンパイルされません。
これまでに(XAMLPadを使用して)思いついた唯一のXAML:
これは、派手な怪物としてレンダリングされます。どのコントロールも適切に配置またはサイズ設定されていません。ウィンドウにコントロールを配置する方法も、適切なサイズにする方法もわかりません。
誰かがそのスクリーンショットを XAML に変換できますか?
注:スクリーンショットを測定することは許可されていません。すべてのダイアログ ユニット (dlu) の幅と高さが指定されています。
注: 1 つの水平 DLU != 1 つの垂直 DLU。水平 DLU と垂直 DLU はサイズが異なります。
こちらもご覧ください
- 画面とフォントの設定に合わせて調整する WPF アプリケーション (または、DLU を WPF の単位に関連付けるにはどうすればよいでしょうか?)
- WPF グローバル フォント サイズ
- WPF ボタンと同じ/推奨される幅
- .ScaleControl の WPF バージョン?
- Microsoft ユーザー エクスペリエンス ガイドライン: 推奨されるサイズと間隔
- Microsoft ユーザー エクスペリエンス ガイドライン: レイアウト メトリック
バンプ: 2011 年 6 月 20 日
delphi - Delphi: ユーザーのフォント設定の処理
ユーザーの UI フォント設定を取得する呼び出しを思いつきました (Borland のハードコードされた "MS Sans Serif" の選択とは対照的に)。
ユーザーのフォント設定が次のようになっているとしましょう。
すべてのアイテム、すべてのフォーム、すべてのアプリケーションのフォントを次のように設定します。
問題は、物事が断ち切られていることです。ボタンが小さすぎる - 狭すぎる、短すぎる。ラベルの文字が切れるなど。
フォームには Scaled プロパティがありますが、フォント サイズによっては変わりません。scaled プロパティは、数値「0」の高さに基づいてシリアル化されるときにフォームをスケーリングしました。
ユーザーの Windows アプリケーション設定をサポートするためにボーランドがどのように私を意図したかについてのヘルプを見つけることができません。
ユーザーのフォント設定を処理するにはどうすればよいですか?
注:エンバーガデロのニュース サーバーが機能しなくなっているか、検閲されているか、壊れているか、ログインが必要なように見えるため、エンバーガデロのニュース グループ サーバーからこれをクロス ポストしました。
更新 1
DPI 設定ではなく、ユーザーのフォント設定について話しているのです。つまり、次の言語に依存しない疑似コードを想像してください。
注:これは私の実際のコードではありません (結局のところ、これは言語に依存しない疑似コードです)。さらに、フォーム上のすべてのコントロールを再帰的に処理し、必要に応じてフォントを変更する必要があります。フォントに親とは異なるスタイル (太字など) が適用されていて、親から継承されなくなった場合は、手動で設定する必要があります。
lkesslerの要求に従って、ユーザーの UI フォント設定を Windows から取得するコードは次のとおりです。