aishen944-163.com

转贴请注明出处,谢谢!!

其实透明贴图的原理就是进行xor运算,

基本公式:A  xor A = 0    A xor 0 = A   A xor A xor B  = B

假如现在有两张图片,一张是我们要对其进行贴图的图片A, 另外一张是要被贴图的图片B

1, 复制图片B的一份拷贝为C

2, 将C中指定的背景色变为全白(0xffffff),其他颜色变为全黑(0x00)

3,     依次执行如下运算:

A  xor B

A  and C

A  xor B

对于C中的白色执行运算后的结果如下:

((A xor B) and 0xfffffff) xor B =  A xor B xor B =  A

对于C中的黑色执行运算后的结果如下:

((A xor B) and 0x0000) xor B =  0 xor B = B

以下是代码实例,例子中用到的两张图片在这里:

#include

#include

#include

static GdkPixbuf *bkpixbuf;

static GdkPixbuf *footballpixbuf;

static gboolean

on_expose_event (GtkWidget * widget,

GdkEventExpose * event, gpointer data)

{

cairo_t *cr;

cr = gdk_cairo_create (widget->window);

gdk_cairo_set_source_pixbuf(cr, bkpixbuf, 0, 0);

cairo_paint(cr);

cairo_destroy (cr);

return FALSE;

}

gboolean blttransparent(GdkPixbuf *dest, const GdkPixbuf *src, gint destx, gint desty, guint transcolor) {

GdkPixbuf *maskpixbuf = NULL;/* 蒙板 */

guchar *p = NULL, *dp = NULL, *sp = NULL;

gint x = 0, y = 0, i = 0;

/* 检查目的区域 */

if(destx + gdk_pixbuf_get_width(src) >= gdk_pixbuf_get_width(dest) ||

desty + gdk_pixbuf_get_height(src) >= gdk_pixbuf_get_height(dest)) { /* 超出目的大小, 什么也不做 */

return TRUE;

}

/* 检查颜色采样数 */

if(gdk_pixbuf_get_bits_per_sample(dest) != 8 ||

gdk_pixbuf_get_bits_per_sample(src) != 8) { // 只

Linux gtk 路由,在linux下使用gtk的gdk相关推荐

  1. linux+ip+路由设置,Linux下IP巧设置-网管专栏,防火墙和路由

    如何实现ip伪装?假设你现在有一台linux主机通过ddn专线连接到internet上,有自己的ip和域名,同时还与20台win95工作站通过hub连接,你现在完全可以通过ip伪装来实现这20台win ...

  2. Linux黑洞路由命令,Linux | 防火墙什么场景下需要配置黑洞路由

    回答 当NAT地址池地址与公网接口地址不在同一网段时,必须配置黑洞路由. 当公网用户主动访问NAT地址池中的地址时,FW收到此报文后,无法匹配到会话表,根据缺省路由转发给路由器,路由器收到报文后,查找 ...

  3. linux 软路由 中文,Linux 软路由性能测试及分析-Go语言中文社区

    本文介绍了 Linux 软路由的工作原理,并使用普通 PC 计算机作为硬件设备,在实际网络环境中测试和讨论了 Linux 软路由的性能.实验证明,在百兆以太网络环境中, Linux 软路由的数据报转发 ...

  4. linux 多播路由查看,Linux下多播路由的实现Windows系统 -电脑资料

    前言(只是一些废话,不想看的可以略过) ===================================== 多播路由是一个很好的技术,在Internet上实现了对数据的"广播&quo ...

  5. linux mtr路由追踪,CentOS下网络路由追踪软件mtr及besttrace

    ​1.MTR MTR是linux平台上一款非常好用的网络诊断工具,或者说网络连通性判断工具,集成了traceroute.ping.nslookup的功能,用于诊断网络状态,可以实时显示经过的每一跳路由 ...

  6. linux主机路由命令,linux下路由设置详解

    路由表信息解释 ##名词解释: Active Routes:活动的路由 Network destination :目的网段 Netmask:子网掩码 Gateway:网关,又称下一跳路由器.在发送IP ...

  7. Linux黑洞路由命令,linux – Blackhole路由私有内部网流量

    ip route add blackhole 10.0.0.0/8 ip route add blackhole 172.16.0.0/12 ip route add blackhole 192.16 ...

  8. linux 删除路由条目,linux添加删除路由条目笔记!

    简单操作笔记: 1. 查看 route -n 2. 添加 route add -net x.x.x.x netmask x.x.x.x gw x.x.x.x route add -net x.x.x. ...

  9. Linux下基于GTK人脸识别界面设计

    Linux下基于GTK人脸识别界面设计 1.人脸识别简介   人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术.用摄像机或摄像头采集含有人脸的图像或视频流,并自动在图像中检测和跟踪人脸, ...

  10. mac 配置c语言环境,C语言学习笔记————–MAC下配置GTK+环境

    一.GTK+是什么 GTK+(GIMP Toolkit)是一套源码以LGPL许可协议分发.跨平台的图形工具包.最初是为GIMP写的,已成为一个功能强大.设计灵活的一个通用图形库,是GNU/Linux下 ...

最新文章

  1. 实现HttpHandlerFactory的方法
  2. 《ASP.NET MVC企业实战》(二) MVC开发前奏
  3. HTTP/2 协议入门
  4. Mean Shift算法(2)在OpenCV上的实现目标跟踪——直方图反向投影
  5. vue中前进刷新、后退缓存用户浏览数据和浏览位置的实践
  6. 注意力测试软件系统,注意力综合评估训练系统
  7. visio教程仓库流程图_教你使用visio 2013绘制产品流程图
  8. 【线性系统】五、稳定性
  9. 在Vue中使用video.js播放器组件(vue-video-player)
  10. 移动端网页字体过多时,字体被自动放大问题
  11. Tegra X2 系统上安装 openpose
  12. Oracle LiveLabs实验:DB Security - Unified Auditing
  13. python求1到100偶数和_python 求1-100之间的奇数或者偶数之和的实例
  14. 用html语言设计李白的一首诗,李白诗《赠汪伦》教学设计
  15. matlab fpga 移植,使用MATLAB,Simulink以及基于模型的设计实现把电机控制算法移植到Zynq平台...
  16. 四分树(UVa297紫书p160)
  17. 鸭子-策略模式(Strategy)[原]
  18. 【2022新书】有趣的数据结构
  19. arm poky linux,交叉编译iMX6 contex-A9 arm-poky 一些坑
  20. 服务战略,是否微软的霸业宏图

热门文章

  1. 关于transform-style:preserve-3d的些许明了
  2. P1930 亚瑟王的宫殿
  3. bitbucket配置_用Bitbucket搭建博客初探
  4. android app闪退的原因分析,打开一个app就闪退解决方法
  5. 华为大数据研发第2轮面试
  6. 通过swoole扩展,实现简单的匿名聊天室功能
  7. 云计算与分布式技术-常见云的比较
  8. 【线代】齐次方程组的解
  9. 自己写的年会抽奖软件免费版带后门作弊,共享出来给大家(更新至V1.3)——转自哈尔滨健康生活网
  10. HLA高层体系结构+RTI(2)