k001
k001
:...

April 2032
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30

k001 [userpic]
Get the screen size and resolution

Я тут немножечко мучал GTK+ (и GDK), и промеж дела написал программулину, которая показывает разрешение и размер экрана. Ну, то есть, сколько в px, в мм и в dpi. Вдруг кому пригодится.

Update: как подсказывает в комментах [info]13-49@lj, то же самое можно получить по xdpyinfo | egrep 'resol|dime'. Так что считаем, что под катом демонстрация возможностей vim syntax highlighting и макроса TOhtml.

/* Get the display properties (size, resolution) using GDK
 *
 * Author:      Kir Kolyshkin <kir (at) sacred (dot) ru>
 * License:     GNU GPL v2 or later
 * Compile:     gcc $(pkg-config --cflags --libs gdk-2.0) -o ss ss.c
 */

#include <stdio.h>
#include <gdk/gdk.h>

int main(int argc, char *argv[])
{
        GdkScreen *s;
        gint w, h, pw, ph;
        const double mm_per_inch = 25.4;
        
        gdk_init(&argc, &argv);
        s = gdk_screen_get_default();

        w = gdk_screen_get_width(s);
        h = gdk_screen_get_height(s);
        pw = gdk_screen_get_width_mm(s);
        ph = gdk_screen_get_height_mm(s);

        printf("Screen size: %dx%d px, %dx%d mm\n", w, h, pw, ph);
        printf("Resolution: %.0f/%.0f dpi\n",
                (double)w/pw * mm_per_inch,
                (double)h/ph * mm_per_inch);

        return 0;
}

Tags:
Comments

Ээээ... xdpyinfo?

...
screen #0:
dimensions: 1680x1200 pixels (331x236 millimeters)
resolution: 129x129 dots per inch
...

М-да.

Спасибо, пост проапдейтил.

А что, он говорит правду? У меня вот, например, врёт (преуменьшает физический размер и соответственно увеличивает DPI)

Я это делал через libX11.
Display *dpy;
char *displayname = NULL;
dpy=XOpenDisplay(displayname);
int width,height,depth;
width=XDisplayWidth(dpy,0);
height=XDisplayHeight(dpy,0);
depth=XDisplayPlanes(dpy,0);
XCloseDisplay(dpy);

Это только половина, надо ещё метрический размер экрана. Впрочем, думаю, там есть такие функции тоже.