【问题标题】:How to display an image without decorations如何显示没有装饰的图像
【发布时间】:2016-12-16 18:27:17
【问题描述】:

找不到 Imagemagick 的 display 命令的选项来避免装饰。只需要显示图像,有没有什么办法可以做到这一点,或者任何其他“核心”命令可以做到这一点?

【问题讨论】:

    标签: imagemagick


    【解决方案1】:

    我假设您的意思是显示没有 window 装饰的图像。有很多方法可以实现这一点,但我想指出,您的操作系统/桌面管理器可能有一些您可以利用的东西。

    例如,在我的 Mac 上,我可以使用 openqlmanage 来显示带有最少装饰的图像。

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

    YMMV。 to this question 也列出了很好的替代方案。

    ImageMagick 的 display 实用程序具有选项 -immutable-backdrop-window 选项以与 X11 显示系统交互。如果您不介意 X11 的磁贴栏,那么-immutable 将隐藏额外的显示小部件。

    display -immutable -resize 40% wizard.png
    

    但是,如果您绝对不想要任何窗户装饰,那么您可能需要制定自己的解决方案。 -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;
    }
    

    编译以上程序&运行会打印出当前窗口id;其中,我现在可以通过 import 实用程序将图像写入背景。

    有点骇人听闻,但又是 YMMV。

    【讨论】:

    • 简直太棒了!
    • 不错的答案 - 效果很好。我需要将 -I /opt/X11/include 添加到我的 iMac 上的编译命令中,顺便说一句。
    猜你喜欢
    • 2019-08-30
    • 2013-01-31
    • 1970-01-01
    • 1970-01-01
    • 2011-08-30
    • 2020-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多