【要望】Per-Monitor DPI対応

Issue #218 closed
udaken created an issue

お世話になってます。

マルチディスプレイ環境で、それぞれ異なるDPIスケールを使用していますが、 メインディスプレイ以外でNeeViewを表示させると、ぼやけて表示されてしまいます。 (Windows 8.1のDPIスケーリングの基本的な振る舞いですが。)

Win10 Anniversary Update 上のWPFアプリでは、 「本当の」Per-Monitor DPIが実現できますので、対応することを検討していただきたいです。 http://sourcechord.hatenablog.com/entry/2016/12/14/081112

Comments (12)

  1. udaken reporter

    組み込んで試してみたのですが、サブディスプレイの表示はよくなったのですが、 メインディスプレイでのイメージ表示が、ガタガタになり、潰れて表示されてしまいました。

    簡単には対応できなさそうです…

  2. Ito Mitsuhiro repo owner

    情報ありがとうございます。
    画像表示部分で独自にDPI計算をしてドット等倍表示になるようにしているので、このあたりが悪さしているのかもしれません。
    こちらにはマルチモニタ環境がないのでテストできませんが、ひとまずこの処理を無効にする設定を検討いたします。

  3. udaken reporter

    「画像のドットバイドット表示」の追加ありがとうございます。 設定を変えて試してみましたが、PerMonitor DPIを有効にすると満足のいく設定は無さそうでした。

    マルチモニタ環境をお持ちでないとのことですので、こちらで動かした結果を添付します。

    すべてオリジナルサイズ、100%での表示です。 サイズの大きい画像を添付することになってしまいますが、ご容赦ください。

    1. v1.18での表示(左はメインディスプレイ=スケーリング150%,右はサブディスプレイ=スケーリング100%) →サブディスプレイ側がぼやけて(正確には、不必要に縮小されて)表示される。拡大しても、ドットバイドットでは表示されない。 比較のフォトアプリではドットバイドットで表示されています。 v1_18表示.png

    2. 画像のドットバイドット表示=FALSE,PerMonitor有効(左はメインディスプレイ=スケーリング150%,右はサブディスプレイ=スケーリング100%) →メインディスプレイ側がガタガタで表示される 画像のドットバイドット表示FALSE,PerMonitor.png

    3. 画像のドットバイドット表示=TRUE,PerMonitor有効(左はメインディスプレイ=スケーリング150%,右はサブディスプレイ=スケーリング100%) →どちらもドットバイドットで表示されるので、これでいいかと思いきや、次のようにメインとサブを入れ替えると… P=150,S=100,画像のドットバイドット表示TRUE,PerMonitor.png

    4. 画像のドットバイドット表示=TRUE,PerMonitor有効(左はサブディスプレイ=スケーリング150%,右はメインディスプレイ=スケーリング100%) →メインディスプレイ側がガタガタになって表示される P=100,S=150,画像のドットバイドット表示=TRUE,PerMonitor.png

    5. 画像のドットバイドット表示=FALSE,PerMonitor有効(左はサブディスプレイ=スケーリング150%,右はメインディスプレイ=スケーリング100%) →サブディスプレイ側がガタガタで表示される P=100,S=150,画像のドットバイドット表示=FALSE,PerMonitor.png

  4. Ito Mitsuhiro repo owner

    詳細なご報告ありがとうございます。 簡単にはいかなそうですね。画像をドットバイドット表示にするには、各モニタに切り替わったタイミングでDPIを取得して画像に適用する必要がありそうです。 参考
    テスト環境が用意できていないのですぐには対応できませんが、検討させていただきます。

  5. udaken reporter

    検討をよろしくお願いいたします。

    ちなみに、virtualboxやvmware playerで仮想マルチディスプレイ環境を構築できます。 (私はvmwareしか試したことはありませんが) http://vboxmania.net/content/%E3%83%90%E3%83%BC%E3%83%81%E3%83%A3%E3%83%AB%E3%83%A2%E3%83%8B%E3%82%BF%E3%83%BC

    Windows 10の仮想マシンは下記からダウンロードできます。 https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/

  6. Ito Mitsuhiro repo owner

    fixed #218 Per-Monitor DPIに対応しました。あわせて .Net 4.6.2 に移行しました。 実際のマルチモニタ環境では試せていませんが、コントロールパネルからのDPI変更にリアルタイムで追従するようになったのでたぶんいけてるはず。 ドットバイドット補正はメイン画像に対してのみ行い、サムネイル等はそのままにするようにしました。

    → <<cset 2952e882058d>>

  7. udaken reporter

    早々に対応いただいてありがとうございます。 試したところ、期待通りぼやけずに表示されていました。

    ただDPIが異なるディスプレイ間でウィンドウを移動した場合、ウィンドウサイズが変わらないため、 オリジナルサイズで表示させていると背景が広がるように見えてしまう点に違和感がありました。

  8. Ito Mitsuhiro repo owner

    refs #218 挙動を選択できるように詳細設定に「ウィンドウサイズのDPI非対応」フラグを追加しました。 デフォルトはFalseになっています。

    → <<cset 94dc72b34d3b>>

  9. Log in to comment