【QT技术应用】2D绘图(2)

【QT技术应用】2D绘图(2)

编辑:落鹤生  时间:2011-02-16 14:17  点击:1468次
QPixmap QPixmap主要完成屏幕后台 (off-screen)缓冲区绘图。QPixmap对象可以使用QLabel或QAbstractButton子类 (QPushButton,QToolButton)显示,QLabel通过设置pixmap属性,QAbstractButton通过设置icon属性 来完成,
收藏到:  MSN - Live Favorites  添加到QQ书签  百度收藏  CSDN技术网摘  添加到google  365Key网摘  新浪ViVi  yahoo  收藏到收客网  Digbuzz我挖网 
TAG:  Qt   绘图  
 
QPixmap
QPixmap主要完成屏幕后台 (off-screen)缓冲区绘图。QPixmap对象可以使用QLabel或QAbstractButton子类 (QPushButton,QToolButton)显示,QLabel通过设置pixmap属性,QAbstractButton通过设置icon属性 来完成,除了使用构造函数初始化,QPixmap对象还可以使用静态函数grabWidget()和grabWindow()函数创建,并绘制指定的窗口 和窗口部件.QPixmap中的像素数据时内部的,并且由底层的窗口系统进行管理,如果要存取像素,只有通过QPrinter函数将QPixmap对戏那 个转换为QImage对象,根据底层系统的不同,QPixmap可以RGB32或者混合alpha格式存储,如果图像有Alpha通道且底层系统允许,则 优先使用混合alpha格式,因此QPixmap时依赖于底层系统的,在X11上和Mac上,QPixmap存储在服务器端,QImage存储在客户点, 在windows上,这两个类表达方式时相同的。QImage和QPixmap可以相互转换,通常QImage载入图像并进行直接操作,然后转换为 QPixmap在屏幕上显示。如果不需要操作像素,就直接使用QPixmap.在windows上,QPixmap还可以与HBITMAP之间相互转 换,QPixmap和QImage一样使用隐式共享,也能够使用数据流。

=========================================
组合模式绘图
组 合模式(Composition Mode)用来指定如何合并源图像和一个图像,最常见的是SourceOver(通常也叫alpha混合),当原像素和目标像素以这种方式混合时,源图像 的alpha通道定义了像素的透明度。组合模式绘图只支持Format_ARGB32_Premultiplied和Format_ARGB32格格式, 而且应该优先使用Format_ARGB32_Premultiplied格式,设置了组合模式后,它对所有的绘图操作都有效,如画笔,画刷,渐变效果和 pixmap/image绘制。QPainter::CompositeMode枚举类型中前12中组合类型是T.Porter和T.Duff于1984 年在沦为(Compositing Digital Image)中阐明的12种混合规则(Porter-Duff规则)混合的计算方法在此给出。以便理解混合的过程。
首先定义混合的因子 :
As:       原像素的alpha分量
Cs:       原像素种计算好(premultiplied)色彩分量
Ad:       目标像素的alpha分量
Cd;       目标像素计算好的色彩分量
Fs:       原像素在输出结果种占有的比例
Fd:       目标像素在输出结果种占有的比例
Ar:       输出结果种的Alpha分量 
Cr:       输出结果种计算好的色彩分量
Porter和Duff定义了选择混合因子Fs和Fd产生不同的视觉效果的12种规则,最终结果种的Alpha值和色彩值由下面的公式决定
    Fs=f(Ad);
    Fd=f(As);
    Ar=AsxFs+AdxFd
    Cr=CsxFs+CdxFd
每种类型的Fs和Fd取值如表所示
------------------------------------------------------------------------------------------
             常 量                                             Fs        Fd              说明
QPainter::CompositionMode_SourceOver            1        1-As         默认模式,源alpha和目标像素混合
QPainter::CompositionMode_DestinationOver       1-Ad       1          和SourceOver相反,目标Alpha和源像素混合
QPainter::CompositionMode_Clear                 N/A       N/A         清除目标像素
QPainter::CompositionMode_Source                N/A       N/A         输出源像素
QPainter::CompositionMode_SourceIn              Ad        0           在目标部分的源替代目标
QPainter::CompositionMode_DestinationI          0         As          于SourceIn相反
QPainter::CompositionMode_SourceOut             1-Ad      0           在目标之外的源替代目标
QPainter::CompositionMode_DestinationOut        0         1-As        于SourceOut相反
Qpainter::CompositionMode_SourceAtop            Ad        1-As        在目标部分的源和目标组合
QPainter::CompositionMode_DestinationAtop       1-Ad      As          与sourceatop相反
QPainter::CompositionMode_Xor                   1-Ad      1-As        在目标之外的源和源之外的目标混合
--------------------------------------------------------------------------------------------------------
注意,上面的说明并没有完全概括各种混合的含义,要准确理解他们可以看公式并进行实践,畜类上面12种Porter_Duff规则外,Qt还支持12种扩展混合模式。下面给出计算公式需要注意如果结果中alpha值和色彩值超过0-255的范围,数值将会被截断

1  QPainter::CompositionMode_Plus           源和目标相加,该操作实现动画中两幅图像的溶解和过度过程。Cr=Cs+Cd   Ar=As+Ad
2  QPainter::CompositionMode_Multiply       源和目标进行正片叠底(multiply)操作。结果的颜色至少是源和目标种较暗的颜色。任何颜色和黑色作该操作产生黑色。任何颜色和白色作该操作将不会改变。Cr=CsxCd+Csx(1-Ad)+Cdx(1-As)  Ar=AsxAd+Asx(1-Ad)+Adx(1-As)=As+Ad-AsxAd
3  QPainter::CompositionMode_Screen         源和目标互补然后相乘结果的颜色至少是源和目标种较亮的颜色。任何颜色和黑色进行滤色操作不会改变,任何颜色和白色进行滤色操作还是白色
4  QPainter::CompositionMode_Overlay        根据目标颜色值不同,进行相乘操作或滤色操作,源色彩保持亮度和阴影覆盖在目标上。目标颜色和源颜色混合以反应目标的亮度。
5  QPainter::CompositionMode_Darken         选择源和目标种较暗的颜色
6  QPainter::CompositionMode_Lighten        选择源和目标种较亮的颜色
7  QPainter::CompositoinMode_ColorDodge     加亮目标颜色以反应源颜色,绘制黑色将没有效果
8  QPainter::CompositionMode_ColorBurn      使目标颜色变暗以反应源颜色,绘制白色没有效果。
9  QPainter::CompositionMode_HardLight      根据源的颜色,决定是正片叠底还是滤色操作。如果源颜色高于0.5,目标颜色将变亮。即进行滤色操作。如果源颜色亮度值低于0.5,目标将会变暗,相当于进行了正片叠底操作。如果源亮度值等于0.5,目标不会改变,变亮或者变暗成都取决于源颜色和0.5的差,绘制纯黑色和纯白色结果还是纯黑或纯白。
10 QPainter::CompositionMode_SoftLight    根据源的颜色,决定进行变暗(darken)操作还是变亮(lighten)操作。如果源颜色比0.5亮,目标将变亮,即进行了滤色操作。如果源颜色比0.5暗,目标将变暗,相当于进行了颜色加深(burn)操作,如果等于0.5.目标不会发生改变。变亮或者变暗的程度取决于源颜色和0.5的差值。
11 QPainter::CompositionMode_Difference     源和目标种较暗的颜色减去较亮的颜色,绘制导致白色反转成目标颜色黑色化
12 Qpainter::CompositionMode_Exclusion      和上一条规则的效果类似,但对比对较低一些,绘制白色将导致反转成目标颜色,绘制黑色没有


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值