pixman ROP/alpha blend 线性变换

 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值