码迷,mamicode.com
首页 > 其他好文 > 详细

pixman ROP/alpha blend 线性变换

时间:2015-02-10 13:24:24      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:pixman   视频编码   图形   算法   

 pixman作为一个独立的第三方绘图库,其主要作用是根据操作模式及相应的数学算法对图形进行二次处理。常见的有Gradient(颜色渐变)、ROP(光栅操作)、矢量图操作、Alpha compositing、线性变换等。我们涉及的有基本的ROP操作(主要是像素的位运算)、Alpha compositing以及缩放用到的线性变换等。下图是Alpha compositing的效果图:
技术分享
    技术分享
    
    这里的Alpha compositing满足如下描述:
        opaque采取:
            over:SRC独占取SRC,DST独占取DST,重叠部分视具体操作而定
            src-over:SRC独占取SRC,DST独占取DST,重叠部分取SRC
            dst-over:SRC独占取SRC,DST独占取DST,重叠部分取DST
            in:只取交集部分
            src-in  :取交集的SRC
            dst-in  :取交集的DST
            out:只取DST or SRC的区域,并且重叠部分去掉
            src-out :只取SRC区域,并去掉交集部分
            dst-out :只取DST区域,并去掉交集部分  
            atop:只取DST or SRC的区域,而交集部分取对方
            src-atop:取DST区域,但交集部分取SRC
            dst-atop:取SRC区域,但交集部分取DST
            xor:顾名思义,即全取SRC and DST,去掉其交集部分  
        (图中可以很清楚的看到这些)
        Partially Transparent类似opaque,只不过多引入了Alpha
        Src    :SRC的色值
        Dst    :DST的色值
        Sa     :SRC的Alpha值,一般是(0~255),这里便于理解视作(0~1)
        Da     :DST的Alpha值,一般是(0~255),这里便于理解视作(0~1)
        SRC独占,则有:    Src * (1 - Da)
        DST独占,则有:    Dst * (1 - Sa)
        重叠部分,取SRC,则有:    Src * Da
        重叠部分,取DST,则有:    Dst * Sa
    
        以src-over为例,则最终该点像素值为:
            Src * (1 - Da) + Src * Da + Dst * (1 - Sa)
           =Src + Dst * (1 - Sa)
        一般该点像素值满足公式: Color = Src * As + Dst * Ad 
                                 (As和Ad分别为Src跟Dst在该点的权重系数)
    线性变换:
        采用3 x 3矩阵对图像进行线性缩放。
        pixman_transform_init_scale()初始化一个3 x 3矩阵,用于缩放
        pixman_transform_translate()涉及两个矩阵,一个是pixman_transform_init_scale()获得的缩放倍数的矩阵,另一个用于操作Z轴,达到平移的目的。这两个矩阵平移矩阵作为左项,缩放矩阵作为右项。
        现以像素点(10,10)为例,现在要将其按适量(4,5)进行平移,并进行放大两倍的操作,则有:
技术分享
        而填充的像素采用线性插值法,即初始点跟终点确定一条直线y = kx,可以得知其斜率,则可以根据这条直线在初始点跟终点之间插入数值,例如:
        x1 = 10, y1 = 10; x2 = 10, y2 = 20;之间插入4个点
        则(x1, y1)与(x2, y2)确定一条直线 x = 10,则有这4个点:
        (10,12), (10,14), (10,16), (10,18)
         当两个像素之间线性插值的时候,还以4个(红色部分)为例,在 0 到 10插入,则有:
            0 2 4 6 8 10

pixman ROP/alpha blend 线性变换

标签:pixman   视频编码   图形   算法   

原文地址:http://blog.csdn.net/lidecoolblue/article/details/43701453

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!