linux下显示不规则图片窗口

简介:

测试环境是ubuntu15.04,使用的图形库是gtk+。

图片格式采用的是X11的xpm格式,首先从网上找一个背景透明的png图片,然后用图形转换工具(比如gimp)转换为xpm格式。

程序代码如下:

#include <gtk/gtk.h>

void close_app(GtkWidget *widget,GdkEvent *event,gpointer data){
    gtk_main_quit();
}

int main(int argc,char **argv){
    GtkWidget *window,*pixmap,*fixed;
    GdkPixmap *gdk_pixmap;
    GdkBitmap *mask;
    GtkStyle *style;
    GdkGC *gc;

    gtk_init(&argc,&argv);
    window = gtk_window_new(GTK_WINDOW_POPUP);
    gtk_signal_connect(GTK_OBJECT(window),"delete_event",
        GTK_SIGNAL_FUNC(close_app),NULL);

    gtk_widget_set_events(window,gtk_widget_get_events(window)|GDK_BUTTON_PRESS_MASK);
    gtk_signal_connect(GTK_OBJECT(window),"button_press_event",
        GTK_SIGNAL_FUNC(close_app),NULL);
    gtk_widget_show(window);

    style = gtk_widget_get_default_style();
    gc = style->black_gc;
    gdk_pixmap = gdk_pixmap_create_from_xpm(window->window,&mask,
        &style->bg[GTK_STATE_NORMAL],"./start.xpm");
    pixmap = gtk_pixmap_new(gdk_pixmap,mask);
    gtk_widget_show(pixmap);
    fixed = gtk_fixed_new();
    gtk_widget_set_usize(fixed,256,256);
    gtk_fixed_put(GTK_FIXED(fixed),pixmap,0,0);
    gtk_container_add(GTK_CONTAINER(window),fixed);

gtk_widget_shape_combine_mask(window,mask,0,0);
    gtk_widget_set_uposition(window,20,400);
    gtk_widget_show_all(window);
    gtk_main();
    return 0;
}

编译命令:

clang `pkg-config --libs --cflags gtk+-2.0` -O3 -g0 -s -o pixmap pixmap.c

执行效果如下:

这里写图片描述

相关文章
|
3月前
|
存储 关系型数据库 MySQL
Linux C/C++ 开发(学习笔记八):Mysql数据库图片存储
Linux C/C++ 开发(学习笔记八):Mysql数据库图片存储
47 0
|
3月前
|
Linux 网络安全
Linux - firewall-cmd 命令添加端口规则不生效排查
Linux - firewall-cmd 命令添加端口规则不生效排查
150 0
|
4月前
|
Java Linux Windows
java 图片上绘制文字Graphics2D linux 中文乱码
java 图片上绘制文字Graphics2D linux 中文乱码
|
7月前
|
安全 Linux 开发工具
16.5.4 【Linux】SELinux 政策内的规则管理
16.5.4 【Linux】SELinux 政策内的规则管理
39 0
|
7月前
|
安全 Linux 网络安全
在Linux中,如何列出和删除 Iptables 防火墙规则?
在Linux中,如何列出和删除 Iptables 防火墙规则?
419 0
|
1月前
|
资源调度 算法 Linux
Linux进程/线程的调度机制介绍:详细解析Linux系统中进程/线程的调度优先级规则
Linux进程/线程的调度机制介绍:详细解析Linux系统中进程/线程的调度优先级规则
54 0
|
28天前
|
编解码 Shell Linux
【Shell 命令集合 系统设置 】Linux 调整终端窗口的大小 resize命令 使用指南
【Shell 命令集合 系统设置 】Linux 调整终端窗口的大小 resize命令 使用指南
33 0
|
2月前
|
机器人 Linux 数据安全/隐私保护
Python办公自动化【Windows中定时任务、OS/linux 系统定时任务 、Python 钉钉发送消息、Python 钉钉发送图片】(九)-全面详解(学习总结---从入门到深化)
Python办公自动化【Windows中定时任务、OS/linux 系统定时任务 、Python 钉钉发送消息、Python 钉钉发送图片】(九)-全面详解(学习总结---从入门到深化)
66 0
|
3月前
|
机器人 Linux 数据安全/隐私保护
Python办公自动化【Windows中定时任务、OS/linux 系统定时任务 、Python 钉钉发送消息、Python 钉钉发送图片】(九)-全面详解(学习总结---从入门到深化)(下)
Python办公自动化【Windows中定时任务、OS/linux 系统定时任务 、Python 钉钉发送消息、Python 钉钉发送图片】(九)-全面详解(学习总结---从入门到深化)
58 0
|
3月前
|
Linux Python Windows
Python办公自动化【Windows中定时任务、OS/linux 系统定时任务 、Python 钉钉发送消息、Python 钉钉发送图片】(九)-全面详解(学习总结---从入门到深化)(上)
Python办公自动化【Windows中定时任务、OS/linux 系统定时任务 、Python 钉钉发送消息、Python 钉钉发送图片】(九)-全面详解(学习总结---从入门到深化)
38 0