ピクセル数のスケーリング (2)
Consumer Preview が公開されましたので、スケーリングについて再度確認してみました。
まず、スケーリングに関するサンプル "Scaling according to DPI sample" が公開されていますので、これをシミュレーターで実行してみました。
シミュレーターの解像度を変更して実行した結果は以下のようになります。
画面サイズ | 表示画素数 | 倍率 | 論理DPI |
---|---|---|---|
10.6inch | 1366x768 | 100% | 96 |
10.6inch | 1920x1080 | 140% | 134.4 |
10.6inch | 2560x1440 | 180% | 172.8 |
27inch | 2560x1440 | 100% | 96 |
Consumer Preview でもシミュレーターで解像度を変更した時に、たまに変更が正常に行われない事がありました。
切り替えが正常に行われれば論理DPIが変りますので、現状では解像度に合わせた確認を行う場合は論理DPIを確認するようにした方が良いようです。論理DPIはサンプルにあるように DisplayProperties.LogicalDpi で取得できます。
論理DPIを見れば解像度の確認ができる事がわかりましたので、実際に解像度に合わせてコントロールにサイズが変るのか確認してみます。
100x100サイズの Canvas を配置して、解像度毎にサイズを確認してみました。
<Grid Background="{StaticResource ApplicationPageBackgroundBrush}"> <Button x:Name="runButton" Content="実行" VerticalAlignment="Top" Width="98" Click="runButton_Click"/> <TextBlock x:Name="dpiText" HorizontalAlignment="Left" TextWrapping="Wrap" VerticalAlignment="Top" Margin="21,72,0,0" FontSize="16" /> <TextBlock x:Name="sizeText" HorizontalAlignment="Left" TextWrapping="Wrap" VerticalAlignment="Top" Margin="21,96,0,0" FontSize="16" /> <Canvas x:Name="testCanvas" HorizontalAlignment="Left" Height="100" VerticalAlignment="Top" Width="100" Margin="81,141,0,0" Background="Red"/> </Grid>
private void runButton_Click(object sender, RoutedEventArgs e) { dpiText.Text = "LogicalDpi : " + DisplayProperties.LogicalDpi; sizeText.Text = "Canvas Width : " + testCanvas.ActualWidth; }
実行してみたところ、解像度を変更しても常にサイズは100のままです。
解像度を変更してもコントロールのサイズが変るわけではなく、コントロールのサイズに対応して実際に描画されるピクセル数が変るだけという事のようです。