2016-12-16 2 views
0

Невозможно найти подходящую команду для Imagemagick's display, чтобы избежать декораций. Просто нужно показать изображение, есть ли способ достичь этого или любая другая «основная» команда, которая может это сделать?Как показать изображение без декораций

ответ

2

Я предполагаю, что вы хотите отображать изображения без окна украшения. Существует много способов добиться этого, но я хотел бы отметить, что у вашего OS/desktop-менеджера, вероятно, есть что-то, что вы можете использовать.

Например, на моем mac, я могу использовать open & qlmanage для отображения изображений с минимальными размерами.

# Use OS defaults 
open wizard.png 
# or Quicklook 
qlmanage -p wizard.png 

qlmanage

YMMV. Есть также отличные альтернативы, перечисленные to this question.

display утилита ImageMagick имеет те параметры, -immutable, -backdrop, & -window варианты взаимодействия с системой отображения X11. Если вы не против плитки плитки X11, то -immutable скроет дополнительные виджеты.

display -immutable -resize 40% wizard.png 

immutable

Однако, если вы абсолютно не хотите декорации окна, то вам может понадобиться для роли собственного решения. Опция -window установит изображение в качестве фона в текущее окно. Известно, что мне просто нужно создать окно без полей & захватить ID, чтобы перейти к identify. См. this answer для создания окна без какого-либо украшения.

// simple_window (compile with `gcc -L/usr/X11R6/lib -lX11 -o simple_window simple_window.c') 
#include <stdio.h> 
#include <X11/Xlib.h> 

int main(int argc, const char * argv[]) { 
    Display * root; 
    Window win; 
    int screen; 
    root = XOpenDisplay(NULL); 
    screen = DefaultScreen(root); 
    win = XCreateSimpleWindow(root, 
           RootWindow(root, screen), 
           10, 10, 
           400, 600, 
           0, 
           BlackPixel(root, screen), 
           WhitePixel(root, screen)); 
    Atom win_type = XInternAtom(root, "_NET_WM_WINDOW_TYPE", False); 
    long value = XInternAtom(root, "_NET_WM_WINDOW_TYPE_DOCK", False); 
    XChangeProperty(root, 
        win, 
        win_type, 
        4, 32, 
        PropModeReplace, 
        (unsigned char *) &value, 1); 
    XMapWindow(root, win); 
    printf("Window created %lu\n", win); 
    XEvent e; 
    while(1) { 
     XNextEvent(root, &e); 
     if (e.type == KeyPress) { 
      break; 
     } 
    } 
    XCloseDisplay(root); 
    return 0; 
} 

Компиляция выше программы & бегущий будет распечатать текущее окно идентификатор; который, теперь я могу передать утилиту import, чтобы записать изображение в качестве фона.

no decorations

Немного взломать иш, но опять же, YMMV.

+0

Просто блестящий! – nightcod3r

+0

Хороший ответ - работает хорошо. Мне нужно было добавить команду -I/opt/X11/include' в команду компиляции на моем iMac с помощью команды XQuartz. –

Смежные вопросы