C# 选择正确的分辨率

C# 选择正确的分辨率,c#,wpf,image,xaml,resolution,C#,Wpf,Image,Xaml,Resolution,我正在制作一个视频游戏,屏幕分辨率有问题。 几个月前,我问了一个非常类似的问题 当时,我得到的答案(使用ViewBox)似乎很完美,但现在我遇到了问题 我希望我的游戏中的每一个图像和控件都有一些适合分辨率的可能变化。 例如,如果用户设置分辨率为800x600,则所有图像和按钮都会缩小到正确的大小。但我确实希望我的游戏是全屏的,而不是窗口的 因此,如果分辨率低于最终用户监视器的分辨率,则所有图像都必须拉伸并看起来“模糊”。如果更高,部分必须在屏幕外 现在,我的代码只是设置最终用户监视器的分辨率,

我正在制作一个视频游戏,屏幕分辨率有问题。 几个月前,我问了一个非常类似的问题

当时,我得到的答案(使用ViewBox)似乎很完美,但现在我遇到了问题

我希望我的游戏中的每一个图像和控件都有一些适合分辨率的可能变化。 例如,如果用户设置分辨率为800x600,则所有图像和按钮都会缩小到正确的大小。但我确实希望我的游戏是全屏的,而不是窗口的

因此,如果分辨率低于最终用户监视器的分辨率,则所有图像都必须拉伸并看起来“模糊”。如果更高,部分必须在屏幕外

现在,我的代码只是设置最终用户监视器的分辨率,不管它是什么。那绝对不是我想要的

我得到的是:

我需要的是一个非常粗糙的例子:

我现在将xaml显示为它的名称。当然它还没有满,但我将展示开头和一些元素,这样您就知道它是如何构建的

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" x:Name="wdwMain" x:Class="RealityIncognita.MainWindow"
    Height="900" Width="1600" ResizeMode="NoResize" WindowState="Maximized" Cursor="Cross" WindowStyle="None" Loaded="wdwMain_Loaded">

<Viewbox x:Name="viewMain" Stretch="Fill">
    <Grid x:Name="areaContainer" HorizontalAlignment="Left" Height="900" VerticalAlignment="Top" Width="1600">

      <Grid x:Name="areaMain">
            <Grid.Background>
                <ImageBrush ImageSource="Resources/Images/Interface/main_interface.jpg"/>
            </Grid.Background>
            <Label x:Name="lblTextOutput" Content="Label" HorizontalAlignment="Center" Height="52" Margin="55,726,31,0" VerticalAlignment="Top" Width="1514" FontFamily="Arial" FontSize="22" FontWeight="Bold" HorizontalContentAlignment="Center"/>
            <Button x:Name="btnExit" HorizontalAlignment="Left" Height="106" Margin="1464,771,0,0" VerticalAlignment="Top" Width="126" Click="btnExit_Click" Background="{x:Null}" BorderBrush="{x:Null}" Foreground="{x:Null}">
                <Button.Template>
                    <ControlTemplate>
                        <Image Source="/Resources/Images/Interface/Blank.png" Stretch="Fill" Margin="12,0,6,0"/>
                    </ControlTemplate>
               </Button.Template>
            </Button>

            <Grid x:Name="areaShowers" HorizontalAlignment="Left" Height="700" Margin="1653,790,-1561,-590" VerticalAlignment="Top" Width="1508"  IsVisibleChanged="areaShowers_IsVisibleChanged">
                <Grid.Background>
                    <ImageBrush ImageSource="Resources/Images/Rooms/Showers/shower_room.jpg" />
                </Grid.Background>


                <Button x:Name="objShowersSoap" HorizontalAlignment="Left" Height="29" Margin="613,423,0,0" VerticalAlignment="Top" Width="17" MouseLeave="MouseLeaveAnyObject" RenderTransformOrigin="11.706,1.897" Click="objShowersSoap_Click" MouseEnter="objShowersSoap_MouseEnter">
                    <Button.Template>
                        <ControlTemplate>
                            <Image Source="Resources/Images/Rooms/Showers/soap.png" Stretch="Fill" Margin="0,0,0,0"/>
                        </ControlTemplate>
                    </Button.Template>
                </Button>
                <Image x:Name="imgShowersOpenMachine" HorizontalAlignment="Left" Margin="0,0,0,0" VerticalAlignment="Top" Source="Resources/Images/Rooms/Showers/drying_machine_open.png" RenderTransformOrigin="0.808,0.471" Stretch="Fill"/>
                </Button>                   
            </Grid>

            <Grid x:Name="areaLockerRoom" Height="700" VerticalAlignment="Top" Width="1508" IsVisibleChanged="areaLockerRoom_IsVisibleChanged" Margin="1653,17,-1561,0" MouseDown="areaLockerRoom_MouseDown" MouseEnter="areaLockerRoom_MouseEnter" MouseMove="areaLockerRoom_MouseMove">
                <Grid.Background>
                    <ImageBrush ImageSource="Resources/Images/Rooms/LockerRoom/locker_room_ready.png"/>
                </Grid.Background>

                <Button x:Name="objLockerRoomCrowbar" Content="" HorizontalAlignment="Left" Height="243" Margin="604,328,0,0" VerticalAlignment="Top" Width="51" MouseEnter="objCrowbar_MouseEnter" Panel.ZIndex="1" Click="objCrowbar_Click" MouseLeave="MouseLeaveAnyObject">
                    <Button.Template>
                        <ControlTemplate>
                            <Image Source="Resources/Images/Rooms/LockerRoom/crowbar_only.png" Stretch="Fill" Margin="0,0,0,0"/>
                        </ControlTemplate>
                    </Button.Template>
                </Button>

                <Button x:Name="objLockerRoomOdyssey" HorizontalAlignment="Left" Height="53" Margin="797,638,0,0" VerticalAlignment="Top" Width="61" Click="objBookOdyssey_Click" MouseLeave="MouseLeaveAnyObject" MouseEnter="objBookOdyssey_MouseEnter">
                    <Button.Template>
                        <ControlTemplate>
                            <Image Source="Resources/Images/Rooms/LockerRoom/img_book_odyssey.png" Stretch="Fill" Margin="0,0,0,0"/>
                        </ControlTemplate>
                    </Button.Template>
                </Button>
                <Button x:Name="objLockerRoomEdda" HorizontalAlignment="Left" Height="53" Margin="1335,549,0,0" VerticalAlignment="Top" Width="61" MouseLeave="MouseLeaveAnyObject" Click="objBookEdda_Click" MouseEnter="objBookEdda_MouseEnter">
                    <Button.Template>
                        <ControlTemplate>
                            <Image Source="Resources/Images/Rooms/LockerRoom/img_book_edda.png" Stretch="Fill" Margin="0,0,0,0"/>
                        </ControlTemplate>
                    </Button.Template>
                </Button>

总结结构如下:

主窗口-视口-区域容器(主网格)-游戏区域(网格)-每个网格的图像和按钮

总结如下: 我得到的:游戏屏幕设置为最终用户显示器分辨率。 我需要的是:游戏将所有图像设置为特定的分辨率,如果分辨率低于最终用户的分辨率,则使其“模糊”,如果分辨率高于最终用户的分辨率,则将其“剪切”

提前谢谢大家,, 叶甫盖尼

添加: 如果我正确理解了它的工作原理,那么应该调整包含所有其他项目的容器网格的大小,如果需要,图像应该变小(默认为1600x900)。然后,这个容器网格必须适合用户的屏幕分辨率,保持小图像质量


更简单的是:我可以把大图像缩小,然后直接在Visual Studio中将它们变大(并降低质量)?实际上,只需调整viewbox就可以了

<Viewbox x:Name="viewMain" VerticalAlignment="Center" HorizontalAlignment="Center">
viewMain.MaxWidth = 1024;
viewMain.MaxHeight = 768;