LINUX gdk/X11正确获取DPI/Resolution的函数

简介: LINUX gdk/X11正确获取DPI/Resolution的函数

首先是屏幕的宽高是很容易获取的。所以就不多说了。


这里的Resolution,不是指宽高,而是指dpi。


错误算法

 试图想自己计算的肯定不对,结果一直是96。典型的如下:


GTK:
  GdkDisplay* display = gdk_display_get_default();
  GdkScreen* screen = gdk_screen_get_default();
    int width   = gdk_screen_get_width(   screen);
    int widthmm = gdk_screen_get_width_mm(screen);
    printf("width=%d, widthmm=%d\n", width, widthmm);
x11:
   Display *display = XOpenDisplay(NULL);
   if (display == NULL)
   {
      fprintf(stderr, "Cannot open display\n");
      exit(1);
   }
   int screen = DefaultScreen(display);
   double xres = ((((double) DisplayWidth(display,screen)) * 25.4)/
     ((double) DisplayWidthMM(display,screen)));
   double yres = ((((double) DisplayHeight(display,screen)) * 25.4)/
     ((double) DisplayHeightMM(display,screen)));

正确函数gdk

这个是反复在网上搜索,终于找到的。


gtk_init(NULL, NULL);
  GdkScreen* screen = gdk_screen_get_default();
    printf("resolution=%f\n", gdk_screen_get_resolution(screen));

正确函数x11

XResourceManagerString是从友商学习到的。初次看到这个函数名,觉得难以置信。


Display* pDisplay = XOpenDisplay(NULL);
   printf("%s\n", XResourceManagerString(pDisplay));
   //会崩溃
   //int screen = DefaultScreen(pDisplay);
   //printf("%s\n", XScreenResourceString(screen));
输出的最后:
Xcursor.size: 24
Xcursor.theme:  dark-sense
Xft.antialias:  1
Xft.dpi:  96
Xft.hinting:  1
Xft.hintstyle:  hintslight
Xft.lcdfilter:  lcddefault
Xft.rgba: rgb


Xft.dpi:    96就是我们迫切需要的东西。  

目录
相关文章
|
21天前
|
Linux
关于Linux目录访问函数总结
关于Linux目录访问函数总结
13 1
|
28天前
|
算法 Linux C++
【Linux系统编程】深入解析Linux中read函数的错误场景
【Linux系统编程】深入解析Linux中read函数的错误场景
202 0
|
1月前
|
存储 监控 Linux
【Linux IO多路复用 】 Linux下select函数全解析:驾驭I-O复用的高效之道
【Linux IO多路复用 】 Linux下select函数全解析:驾驭I-O复用的高效之道
52 0
|
1月前
|
监控 网络协议 Shell
【Shell 命令集合 网络通讯 】Linux 监控和记录网络中ARP(Address Resolution Protocol)活动 arpwatch命令 使用指南
【Shell 命令集合 网络通讯 】Linux 监控和记录网络中ARP(Address Resolution Protocol)活动 arpwatch命令 使用指南
34 0
|
28天前
|
存储 算法 Linux
【Linux系统编程】深入理解Linux目录扫描函数:scandir目录函数(按条件扫描目录
【Linux系统编程】深入理解Linux目录扫描函数:scandir目录函数(按条件扫描目录
37 0
|
15天前
|
Linux 开发者
Linux文件编程(open read write close函数)
通过这些函数,开发者可以在Linux环境下进行文件的读取、写入和管理。 买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云
84 4
|
28天前
|
存储 Unix Linux
深入理解 Linux 系统下的关键网络接口和函数,gethostent,getaddrinfo,getnameinfo
深入理解 Linux 系统下的关键网络接口和函数,gethostent,getaddrinfo,getnameinfo
14 0
|
1月前
|
Linux C语言
Linux 下pause函数是如何实现的?
Linux 下pause函数是如何实现的?
14 0
|
1月前
|
网络协议 Linux C++
Linux C/C++ 网络编程中地址格式转换(inet_pton和inet_ntop函数)
Linux C/C++ 网络编程中地址格式转换(inet_pton和inet_ntop函数)
25 0
|
1月前
|
存储 Linux
linux waitpid函数详解
linux waitpid函数详解
22 0