pic销毁和摧毁的区别是什么意思啊

X.Org提供了XComposite扩展通过该扩展,既可鉯实现透明和性感的界面也可以为开发者提供一种访问被覆盖的窗口内容的方法。

本文将重点讨论如何通过CompositeRender扩展来访问被覆盖的窗口內容同时,使用Damage来跟踪窗口内容的变化也是很必要的(从而保证了被覆盖窗口内容是实时的)

本文主要目的:使用XComposite实现桌面缩略图导航,Expos特性(在GTK里面需要重写expose函数来实现XComposite效果,这里说的应该就是这个)当然,本文提供的思想也可应用于XComposite管理器

窗口显示出来的时候,同时会分配一个后台的pixmap窗口隐藏的时候,后台pixmap会被释放当窗口被最小化或者不在当前桌面时,是无法访问窗口的内容的

XComposite这样工莋有两个原因。首先可以最小化后台存储所需的县存。其次

就传统的X设计而言,在一个隐藏的窗口上绘图会牺牲性能所以应用和工具从来不会在最小化的窗口上绘图。

在这种情况下如果要在任务栏提供一些按钮,而且这些按钮上有窗口的缩略图会变得非常的困难。其解决办法之一是在窗口ummap之前,缓存该窗口的缩略图不过,XComposite提供了更简单的解决办法

最小化的窗口内容是一直不可访问的,非活動桌面的窗口内容则取决于具体的窗口管理器实现如果窗口管理器为每一个桌面提供一个虚拟的桌面,并且不unmap非活动的窗口那么桌面仩的窗口内容依然是可访问的。不过KWinMetacity都不是这样的

本节将简单介绍使用XRender来访问窗口内容。当然如果使用X核心协议,你可以通过创建GC嘫后使用XCopyArea()来访问窗口内容但是,由于XComposite扩展提供了新的

visuals(就是alpha通道)这就无法保证源drawable和目的drawable是匹配的。这通常会导致匹配错误而使用XRender扩展鈈存在该问题。

同时X核心协议并不支持alpha通道,也就是说他无法合成具有ARGB visual的窗口即使源和目标窗口具有相同的格式,核心协议(X11R6.8)也没囿性能上的优势X11R6.8也是第一个支持新的XComposite扩展的发行版本。

综上使用XRender有很多优点而没有缺点,所以使用Xrender是很值得的

窗口本身并不会察觉箌他们被重定向到offscreen显存,既有的应用也不需要为此做任何

修改无论是从用户的角度还是从应用的角度看,这些都和窗口被重定向前一样笁作

如果要访问窗口的内容,首先要获取该窗口的ID你可能会创建QPixmap,然后将窗口内容拷贝到里面去但是要注意窗口内容本身就是Pixmap,如果你要存储多个窗口的内容为每个窗口创建QPixmap将会导致每个窗口在显存里面存放了两份。所以这样做并不合适但是如果你只是想存储窗ロ的缩略图,则创建QPixmap是合适的

除了需要知道了窗口的ID,还需要后台pixmap的一些其他的信息如窗口大小,pixels格式以及该窗口是否具有alpha通道。

XGetWindowAttributes昰同步调用(会阻塞)所以不建议经常调用该函数。在实际使用过程中还需要检查其返回值,这是因为X是异步的窗口有可能在你调鼡该函数的时候已经被销毁和摧毁的区别了。

通过上面的介绍已经获得了窗口的大小、pixel格式以及窗口是否具有alpha通道等内容。现在需要做嘚是为该窗口创建XRender

于绘图Picture是一个具有drawable(在本例,drawablewindow)相关信息的服务器端结构譬如drawable的格式,绘图时该绘制的剪切区域以及是否需要縮放等。

XRenderCreatePicture可以为drawable创建picture该函数是异步的,所以当窗口不存在的时候并不会返回错误代码而是在X处理到该请求时给客户端发送一个X错误,返回的picture是无效的(如果后续调用继续使用该picture可能会导致X错误)。

正确的响应这些错误时非常复杂的也不是本文要论述的内容。不过这些错误是没有什么坏处的仅仅是在终端打印一些信息而已。当应用再次进入事件主循环之后应用会收到窗口被删除的信息。

为了避免烸次绘制窗口的时候重这些步骤可以将这些信息附加到一个类上去。你可以为QPixmap/QWidget提供绘图函数

窗口的后台Pixmap总是矩形的。但是当窗口是非矩形时我们不希望绘图时拷贝非窗口的内容。为此需要设置picture的剪切区域为窗口的shape区域该实现需要XFixes的支持。当然使用XFixes扩展也需要查询其是否可用。

还有一些有用的信息如何时通过XRender绘制pixmap,源和目标drawable都有picture源和目标picture都有剪切区域集。如果你不打算在绘制窗口的时候缩放窗ロ你可以将剪切区域设置为目标picture

别忘了这些区域仅仅是一个拷贝在窗口大小和形状发生变化的时候需要对其更新。

XShape扩展提供了形状變化通知机制但是只有在代码里面显示的请求后才可以。使用下属的办法会让XShape发送该通知:

到这里所有XRender扩展绘制窗口需要的信息都提供叻并且为窗口提供了源picture

该函数有三个参数:源picture目标picture,可选的遮罩picture本例中需要遮罩

XRenderComposite的另一个重要参数是op,这个参数指定了源和目标潒素如何组合的当前有两重类型的操作:PictOpSrc and

如果你只是想获得窗口的某次快照,那你就不需要在窗口内容变化的时候更新快照你可以跳過本节。

首先当然需要询问X是否支持damage扩展:

确定X支持了damage扩展后,接着就需要为我们感兴趣的窗口创建damage句柄Xdamage有一些报告窗口内容变化的辦法。当窗口从非damageddamaged状态时可以指定一个事件。当damage事件不再需要的时候要通过XDamageDestroy来销毁和摧毁的区别。

要注意的是和其他提供通知机淛的扩展不同,XDamage提供了damage通知对象而不是提供一个XDamageSelectInput请求上文讲述XShape扩展的时候就提供了XShapeSelectInput请求来请求窗口内容的变化。

有意思的是XDamage并不仅仅昰跟踪窗口的damage,而且还能够跟踪pixmap的变化

X会持续不断的通过网络socket给应用发送事件,这些事件会被应用存放到事件队列中(这个队列是在X还昰客户端)。应用事件主循环会通过XNextEvent从该队列中读取事件

Qt里做这些事情的是QApplication。但是在本例中我们会在QApplication处理事件之前先截获它。

保存damage扩展的event base是非常重要的每一个x事件都具有一个唯一的数值标记,而核心扩展的事件时从0开始的

在计算事件真实的事件数值时,event base将作为瑺量下文将讲述如何使用。

每个X事件都有相应的结构XEvent是所有的事件的Union。它可以被强制转化为匹配的事件类型

请注意,队列里面可能囿同一个窗口的同种类型的多个事件所以你需要等到所有的事件都被处理结束才进行下一步。在damage事件之后队列里面可能还有一个DestroyNotify事件。

在上面的例子中所有的damage从窗口中删除了。但是真实的窗口区域被丢失了在下面的例子,damage区域从damage对象里提取并被设置为picture的剪切区域:

这样在窗口显示的时候只有damaged的像素被拷贝。但是如果绘制窗口的时候你希望缩放它则不应该使用这个办法。缩放会在下面的章节讨论

如果只是创建缩略图,你需要缩放它这里将简单介绍通过XRender来缩放。通过XRender来做的优点是缩放是在服务器端实现的,所以这里不会有图爿的传递这是非常重要的,尤其是远程连接的时候

缩放的办法:为picture设置一个转换矩阵,从而在窗口显示的时候实现内容的缩放XTransformQWMatrix工莋的方式是类似的:

XTransform是透视转换矩阵,缩放并不是唯一的转换譬如,下面的矩阵将会将picture按时钟循序旋转30度:

请注意旋转的中心是左上角,并不是picture的中心所以你需要通过偏移来补偿它。

每次图片被渲染的时候转换矩阵是被实时应用的。所以缓存这些最终的图片是有一萣价值的

如果希望在窗口被销毁和摧毁的区别或者调整大小(但是没有显示)的时候还可以访问窗口的内容,你可以增加后台pixmap的引用计數来防止其被释放:

但是在窗口大小被调整的时候会重新分配后台pixmap,这样的话会导致内存泄露所以建议的方式是,应用截获到调整大尛事件则XFreePixmap,并销毁和摧毁的区别picture然后调用XcompositeNameWindowPixmap,然后重新创建picture

下面的代码可以获取大小调整事件(注意是获取而不是处理):

有时候可能会要求将窗口的快照保存到磁盘。一种办法是创建窗口大小的QPixmap,将内容拷贝到pixmap然后使用QPixmap::convertToImage。这个方法的缺点是由于Qt3alpha通道的有限支持窗口的alpha通道会丢失。

当窗口的内容被修改时automatic redirection模式下屏幕会被自动刷新。而手动不会

}
  • 区域产业规划是地方经济发展战畧的核心内容是各级政府部门发展相关产业的“路线图”,对于区域发展规划来说就相当于一张蓝图对一个建筑物的重要性,有了这張“蓝图”区域才能在有规划有计...


拉胯,就是关键时候掉链子的意思是北方的一个方言。

拉胯是什么梗?我们在刷抖音的时候最近网仩传着的“拉胯”是什么梗?在网上大家都能看到在玩拉胯这个梗,那么这到底是什么意思呢?

拉胯就是关键时候掉链子的意思,是北方的┅个方言出处则是世界第一中单otto在一场韩服排位喷队友说大家伙都挺猛的怎么到你这就拉了跨了呢。常见用法:大伙都挺给劲儿的咋箌了你这就拉了胯呢。

抖音拉胯这个梗的意思其实就是说在关键时候掉链子是北方的一个方言。

抖音拉胯的出处其实是来自于一个电竞仳赛中世界第一中单otto在一场韩服排位喷队友说大家伙都挺猛的怎么到你这就拉了跨了呢。也可以用来形容今年lgd在ti上的表现

一般我们是鈳以这样说的:大伙都挺给劲儿的,咋到了你这就拉了胯呢

在北方拉胯的抽象意思是:连胯骨都拖在地上了,意思是人已经瘫软成一堆爛泥一样

办公楼行业市场需求与发展前景如何?怎样做价值投资?

中研网 发现资讯的价值 研究院 掌握产业最新情报        中研网是中国领先的综匼经济门户聚焦产业、科技、创新等研究领域,致力于为中高端人士提供最具权威性的产业资讯每天对全球产业经济新闻进行及时追蹤报道,并对热点行业专题探讨及深入评析以独到的专业视角,全力打造中国权威的经济研究、决策支持平台! 广告、内容合作请点这裏

10月12日电 今年第19号台风“海贝思”将于今日晚上登陆日本预计将于12至13日逼近从东日本到西日本的广泛地区。就目...

10月12日百度获30张自动驾駛载人测试牌。在2019中国国际数字经济博览会期间百度和沧州签署战略合作协议,并获颁沧...

10月12日苹果重返全球市值第一宝座,10月5日苹果市值再度超过1万亿美元关口后接连几日上涨,已让苹果市值突破历史...

杀猪盘是什么意思 杀猪盘网络流行词,是“从业者们”自己起的洺字是指放长线“养猪”诈骗,养得越久诈骗得越狠...

10月11日,贾跃亭在美国法庭主动申请个人破产重组以偿还债务。该人士真正属于賈跃亭个人的债务很少大量债务为个人...

10月11日消息,谷歌此前全力推动Android 10 的采用2019年Android开发者峰会将于本月晚些时候正式拉开帷幕。有趣的...

【蝂权及免责声明】凡注明"转载来源"的作品均转载自其它媒体,转载目的在于传递更多的信息并不代表本网赞同其观点和对其真实性负責。中研网倡导尊重与保护知识产权如发现本站文章存在内容、版权或其它问题,烦请联系 联系方式:、8,我们将及时沟通与处理

}

超过14,538,793名用户加入摄图网畅享商用蝂权

验证码登录 账号密码登录

验证码注册 账号密码注册

}

我要回帖

更多关于 销毁和摧毁的区别 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信