クリップボードの画像を表示すると拡大されてしまう。

投稿者: Anonymous

Windows フォームアプリで、Form に PictureBox を貼り付けて、

this.pictureBox1.Image = Clipboard.GetImage();

クリップボードのイメージを PictureBox に設定すると、以下のように画像が大きく表示されてしまいます。

画像の説明をここに入力

(左側がイメージコピー元のオリジナルのウィンドウ、右側がクリップボードのイメージを表示したフォームです。ペイントをアクティブウィンドウにして Alt + PrintScreenでクリップボードに保存しました)

この現象は、ディスプレイの解像度が 1920 x 1080 の時だけ発生し、1600 x 900 や 1024 x 768 など他の解像度の場合は、同じサイズで表示されました。

PC環境に依存する要因があると思いますが、
特定の解像度でオリジナル画像と表示サイズが異なってしまう原因はなんでしょうか。
また、常にオリジナル画像と同じサイズで表示するためにはどうしたらよいでしょうか?

補足:

クリップボードに保存した画像をペイントなどの画像ツールに貼り付けると表示サイズはオリジナルと変わりません。ですので、PictureBoxに表示する際の問題と考えています。

解決

すべての項目のサイズを変更する
の[すべての項目のサイズを変更する]はどうなっていますか? この設定に従って拡大されたのではと推測しますが…。[すべてのディスプレイで同じ拡大率を使用する]にチェックした上で[小 – 100%]を選択すると確実に拡大を止められます。
またその場合、質問内容は、利用者のコントロールパネルの設定を無視して画面サイズを維持したいというものでしょうか? Windowsフォームにおける自動スケーリングに説明がありますが、FormのAutoScaleModeをNoneに設定することで実現できます。(…がそれはそれで困るかな?)


WindowsはバージョンごとにHigh DPI Featuresがいろいろあります。Noneにしても拡大されたとのことですが、同じ設定値でも再ログオン後には状況が異なったりもします。(設定変更~再ログオンまではDPI仮想化で動作し、再ログオン時にSystem DPIが更新されDPI仮想化がキャンセルされる、など。)
どこまで対応するかで対応方法も変わってきます。とりあえずApplication Manifestを付けるだけでもだいぶ改善します。

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *