[C#]WPF 分辨率的无关性的问题

这篇具有很好参考价值的文章主要介绍了[C#]WPF 分辨率的无关性的问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是WPF的分辨率无关性?

首先得解什么是Dpi(Density independent pixels ,设备无关像素),百度百科的解释DPI是指每英寸的像素,对应界面显示即是屏幕上每英寸的像素。

如标准的Windows DPI(96Dpi),代表1英寸96个像素。

假设有一个96px*96px的按钮,如果在标准标准的Windows DPI的情况下看起来就是英寸的大小,如果在其他Dpi的情况下假设为192Dpi,实际只需要将原来的96px*96px按钮像素大小翻倍即可。

而WPF就是通过改变像素值来实现分辨率无关,具体公式如下:

[物理单位尺寸]=[设备无关单位尺寸]×[系统DPI]

其中设备无关单位尺寸值和Windows DPI的尺寸是一样的。上面那个例子变成公式就是

1/96英寸 * 192Dpi  = 2px;而真实尺寸 = 设置的像素值 * 物理单位尺寸 即 96px*2px = 192px;

 

WPF分辨率无关的问题?

提一下我遇到问题的情况,我写了一个在图片上定位然后显示框的功能,然后那个框不是图片上的,而是一个组件,需要的是将框和定位点和长度传递给显示框。

图片很大,图片要适应程序的宽高,所以有个缩放值。然后图片长宽除缩放值的即为渲染到界面图片的大小。然后我想着计算出来框的定位点和长度,同理除缩放值就可以。

结果在我的电脑上运行正常,然后在其他电脑上运行,定位点和框大小都变大了。

最后测试是屏幕的缩放不同导致的。

对于图片显示在缩放后,WPF的真实尺寸是设置的像素值 * 物理单位尺寸 。而给定的自定义控件属性是并不会乘物理单位尺寸,也就是缩放情况下是显示是正常的。导致实际像素得到了缩放。

解决方法其实很简单,在将框和定位点和长度除缩放值再除屏幕缩放值就可得到真实值。

而WPF中屏幕缩放值最简单的获取方法:

     double screenscale = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width / SystemParameters.PrimaryScreenWidth;//windows
     double screenscale1 = NSScreen.MainScreen.Frame.Width/ SystemParameters.PrimaryScreenWidth;//MacOs

后面发现  其实WPF正是因为分辨率无关性,导致你将屏幕比例缩放后,各个控件都被放大。

对于一些需求是,无论这么缩放,软件的实际渲染大小不应该改变。

例如先在1080p分辨率下创建一个WPF程序

[C#]WPF 分辨率的无关性的问题

界面设置为全屏化,只有两个按钮一个按钮高1000,一个按钮高80。

运行结果如下

[C#]WPF 分辨率的无关性的问题

然后改变缩放为125%

[C#]WPF 分辨率的无关性的问题

再运行结果如下

[C#]WPF 分辨率的无关性的问题

可以看到小按钮被挤出屏幕了。同理,我遍历Button,然后将Button的大小除于缩放比例

       private void StackPanel_Loaded(object sender, RoutedEventArgs e)
        {
            double screenscale = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width / SystemParameters.PrimaryScreenWidth;
            if (sender is StackPanel panel)
            {
                foreach (Button button in panel.Children)
                {
                    button.Width /= screenscale;
                    button.Height /= screenscale;
                }
            }
        }

最后样式和缩放为100%一致。

[C#]WPF 分辨率的无关性的问题

 

 

如有问题,欢迎批评指正。

                                  文章来源地址https://www.toymoban.com/news/detail-606763.html

到了这里,关于[C#]WPF 分辨率的无关性的问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 成功解决VMware安装操作系统出现分辨率的问题

    如下图: 在VMware16上安装ubuntu操作系统的时候,出现分辨率问题, 导致底部的按键没有出现 比如确定,返回,后退等这些按钮都没有。 出现这个问题一般是因为分辨率的问题导致的,VMware安装ubuntu默认使用的分辨率是800x600

    2024年02月09日
    浏览(41)
  • ubuntu 22 下显示器分辨率自定义问题xrandr

    数据线有问题,一般的数据线,在win下正常,在ubuntu22下,无法识别显示器,只能自定义分辨率:亲测: 注意看上面的VGA-1,换成你自己的接口: 上面的模式是第一行的CVT出来的,接口换成自己的; 这时,如果正常,就好,如果不正常,提示出错:我的就出错

    2024年02月08日
    浏览(61)
  • iOS开发-WebRTC本地直播高分辨率不显示画面问题

    iOS开发-WebRTC本地直播高分辨率不显示画面问题 在之前使用WebRTC结合ossrs进行推流时候,ossrs的播放端无法看到高分辨率画面问题。根据这个问题,找到了解决方案。 WebRTC是什么呢? WebRTC (Web Real-Time Communications) 是一项实时通讯技术,它允许网络应用或者站点,在不借助中间媒

    2024年02月13日
    浏览(48)
  • 远程电脑未连接显示器时分辨率太小的问题处理

    背景:单位电脑显示器坏了,使用笔记本通过向日葵远程连接,发现分辨率只有800*600并且不能修改,网上找了好久找到了处理方法这里记录一下,主要用到的是一个虚拟显示器软件usbmmidd_v2 1)下载usbmmidd_v2 2)解压缩usbmmidd_v2.zip,解压缩以后如下图所示 3)依次点击1,2步的批处

    2024年02月04日
    浏览(187)
  • 关于Qt适配不同分辨率和缩放率时可能遇到的问题和解决方案

    如果没有特殊的处理,Qt的UI窗口在不同的分辨率和缩放率下,其显示效果可能会出现问题,常见的有: 子控件堆叠,无法显示完整 窗口尺寸变大,超出屏幕的显示范围 控件变形,长宽比不合理 界面模糊 字体变大,控件尺寸却没有变化 有两种方式可以对UI界面进行良好的缩

    2024年02月05日
    浏览(55)
  • LabVIEW开发的上位机界面在其它电脑分辨率下-界面窗口偏移显示问题解决

    目录 问题: 分析: 解决方式 1)编辑前面板边界适配对应的分辨率 2)编辑前面板窗口-窗口边界 3)编辑前面板窗口-保持窗口比例 4)设置VI属性--窗口运行时位置居中显示 参考 在基于LabVIEW开发的上位机界面打包安装程序,并将该安装程序在其它电脑下运行,出现打开的界

    2024年02月09日
    浏览(40)
  • 解决visio绘图插入到word后导出为pdf格式时分辨率下降的问题

    题目:解决visio绘图插入到word后导出为pdf格式时分辨率下降的问题     首先说一下软件配置:     (1) word为2016;     (2) visio共两个版本:Microsoft Visio Professional 2013和Microsoft Visio Premium 2010,以下分别简称为visio2013和visio2010;     (3) Adobe Acrobat Pro DC 2019     (4) 福昕PDF阅读器

    2024年02月07日
    浏览(162)
  • 解决OpenCV使用USB摄像头获取高分辨率视频低帧率、卡、果冻画面的问题

    最近制作移动设备,需要安置多个usb摄像头到电脑,踩了几个坑,记录一下解决方案。 不能使用分线器插多个usb摄像头,同一时间只能加载一个。 usb摄像头调高分辨率时,非常卡顿,视频画面像果冻一样,及不流畅 第二个情况具体描述: 摄像头支持1920*1080  60fps,opencv在

    2024年02月16日
    浏览(93)
  • word软件中硬件图像加速有什么用处?禁用硬件图形加速(G)会影响word文档中插入图片的分辨率吗?

    问题描述:word软件中硬件图像加速有什么用处?禁用硬件图形加速(G)会影响word文档中插入图片的分辨率吗? 问题解答: 在 Microsoft Word 中,硬件图形加速主要用于提高图形元素的渲染速度和性能,特别是处理大量或复杂的图形时。启用硬件图形加速可以加快图形的加载速度

    2024年02月21日
    浏览(52)
  • 屏幕分辨率:PC / 手机 屏幕常见分辨率,前端如何适配分辨率

    一、常见的PC屏幕分辨率 序号 水平像素点数和垂直像素点数 也被称为 常见显示器 1 1366 × 768 720p 或 HD Ready 常见于笔记本电脑和低端桌面显示器 2 1920 × 1080 1080p 或 Full HD / 全高清 高端笔记本电脑和中高档台式机 3 2560 × 1440 2K 分辨率 常见于高端笔记本电脑和高端台式机 4 38

    2024年02月03日
    浏览(73)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包