Porter-Duff compositing rules

2023-11-09

1984 年 7 月《计算机图形》杂志 18 期 253 - 259 页,刊登了Porter Thomas 和 Duff Tom 的论文《Compositing Digital Ima-ges》,文中讲述了12个合成规则,这些规则都是基于一些简单的数学等式。

​ 文中提出一个重要的alpha channel的概念,并定义了源图像(正在绘制的基元)和目标图像(图形区域)的像素的alpha分量和颜色的

每个案例都描述了在一个蓝色矩形(目标图像)上绘制一个红色椭圆的图像(源图像)。

porter/duff混合公式

Cr=Cs*Fs+Cd*Fd

Ar=As*Fs+Ad*Fd

F表示作用于CA上的因子,Ffactor

因子 A 代表这个像素的alpha通道,C代表这个像素的每个颜色分量。

下标 rs d分别 代表这个像素的 结果(result)、源 (source) 目标 (destination)

As 代表(绘制到图形区域的基元) alpha通道,

Ad 代表已经在图形区域上的像素的alpha 通道。

Ar 最终计算结果的alpha通道。这个等式中的所有值都是在0.01.0之间的 浮点数,计算结果也位于这个范围。

PorterDuff12个规则

每个案例都描述了在一个蓝色矩形(目标图像)上绘制一个红色椭圆的图像(源图像)。

Source Over (源覆盖)

这是默认模式。源的Alpha用于在目标顶部混合像素。

Fs=1,Fd=(1-As)

Ar=As+Ad*(1-As)
Cr=Cs+Cd*(1-As)

Clear

独立于源,清除目标中的像素( 将其设置为完全透明)

Fs=Fd=0

Ar=0
Cr=0

目标中的颜色和alpha都被清除掉。无论用什么颜色或形状来绘制,被源覆盖的每个目的地 的像素都会消失,如图所示。

Destination

输出是目标像素。这意味着混合无效。此模式与Source相反。

Fs=0Fd=1

Ar=Ad
Cr=Cd

DestinationAtop

目标像素混合在源的顶部,目标像素的alpha减少了源像素的alpha。此模式与SourceAtop相反。

Fs=(1-Ad)Fd=As

A =As*(1-Ad)+Ad*As)=As

Cr=Cs*(1-Ad)+Cd*As

DestinationIn

输出是目标,其中的alpha值被源的alpha值减小。此模式与SourceIn相反。

Fs=0Fd=As

Ar=Ad*As
Cr=Cd*As

位于源内部的那部分目的地取代目标。它与DstOut相反,但是,如果使用50%alpha 值,两种操作看起来一样。

DestinationOut

输出是目标图像,其中的alpha值由源的A值而减少。此模式与SourceOut相反。

Fs=0Fd=(1-As)

Ar=Ad*(1-As)
Cr=Cd*(1-As)

位于源外部的那部分目的地取代目标。它与DstIn相反,但是,如果使用50%alpha 值,两种操作看起来一样。

DestinationOver

目标的Alpha用于将其混合在源像素的顶部。此模式与SourceOver相反。

Fs=(1-Ad)Fd=1

Ar=As*(1-Ad)+Ad
Cr=Cs*(1-Ad)+Cd

目的地与源组合,然后用这个结果取代目标。位于目标之外的那部分源通常用这个合成的累加的不透明度绘制。

Source

输出是源像素。 ( 这意味着基本的复制操作,并且在源像素不透明时与SourceOver相同)

Fs=1Fd= 0

Ar=As
Cr=Cs

源复制到目的地。目的地由源来代替。在图中,蓝色矩形(目的地)没有显示在红色 椭圆下面,因为红色椭圆(源)代替了它。

SourceAtop

源像素在目标顶部混合,源像素的alpha减少了目标像素的alpha

Fs=AdFd =(1-As)

Ar=As*Ad+Ad*(1-As)=Ad
Cr=Cs*Ad + Cd*(1-As )

位于目标内部的那部分源与目标组合。位于目的地之外的那部分源丢弃掉。

SourceIn

输出是源,其中的alpha值将减去目标的alpha值。

Fs=AdFd = 0

Ar=As*Ad
Cr=Cs*Ad

位于目的地内部的那部分源代替目的地。位于目的地之外的那部分源丢弃掉。

SourceOut

输出是源,其中目标的alpha值减小了最终的A值。

Fs=(1-Ad)Fd= 0

Ar=As*(1-Ad)
Cr=Cs*(1-Ad)

位于目的地之外的那部分源代替目的地。位于目的地内部的那部分源丢弃掉。

Xor

( alpha值与目标alpha值的负数)与目标合并,该目标的alpha值与源alpha的倒数成反比。 CompositionMode_Xor与按位Xor不同。

Fs=(1-Ad)Fd=(1-As)

Ar=As*(1-Ad)+Ad*(1-As)
Cr=Cs*(1-Ad)+Cd*(1-As)

位于目的地之外的那部分源与位于源之外的那部分目的地结合。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Porter-Duff compositing rules 的相关文章

随机推荐

  • ReadProcessMemory Types of actual and formal var parameters must be identical

    转自 https www cnblogs com cb168 p 5884673 html delphi XE Berlin ReadProcessMemory WriteProcessMemory delphi XE Berlin dcc
  • 变长参数表va_list,模板template,打造通用函数

    假设我想写一个支持变长参数的max函数 template
  • 还在找数据库日期如何格式化嘛?看这一篇文章就够了

    目录 1 MySQL数据库 2 PostgreSQL Oracle 人大金仓 1 MySQL数据库 DATE FORMAT 函数 示例 SELECT DATE FORMAT NOW Y m d H i S 食用方法如下 DATE FORMA
  • vue中nextTick使用引起的一个小问题

    问题描述 两个页面之间进行快速切换会报错元素找不到 问题原因 该方法的调用是在nextTick中 也就是放在微任务队列中 当切换到该页面后主任务开始执行 主任务执行完成后 更新dom元素 然后才是下一个tick 然后快速切出该页面 组件销毁
  • 量产国产服务器cpu芯片,中国第一!百度自研芯片量产:配国产CPU

    目前 三星电子与百度联合宣布 昆仑芯片已经完成所有研发工作 将在明年初投入规模量产 采用三星14nm工艺 这也是两家巨头的第一次代工合作 2018年7月份 百度发布了自主研发的中国首款云端AI全功能AI芯片 昆仑 号称业内设计算力最高的AI
  • 单片机没有串口,你会如何打印调试信息?

    摘要 输出调试信息是软件开发中必不可少的调试利器 在出现bug时如果没有调试信息将会是一件令人头痛的事 本文主要介绍在嵌入式开发中用来输出log的方法 这些方法都是在实际开发过程中使用过的 嵌入式开发的一个特点是很多时候没有操作系统 或者没
  • 【CVE-2021-3156】linux sudo提权复现及补丁修复

    前言 今天安全圈都在刷屏 CVE 2021 3156 这个漏洞 由于这是一个缓冲区溢出漏洞 通用性比较强 因此也跟风实验一下 详细复现及修复过程如下 一 实验环境 操作系统 kali linux 2020 1b 1 adduser命令新建一
  • 【深度学习】生成对抗网络

    下文以图片作为数据举例介绍 生成网络 生成器 gt 以假乱真 生成网络的职责是把随机点模仿成与真实数据集相似的图片 这些随机点是从一个潜在空间中随机抽取的 它可以看作一个实现 点对点变换 的映射 而真实图像在图像空间中的分布十分复杂 简单的
  • 破解windows7系统密码

    theme smartblue 一 利用5次shift漏洞破解win7密码 1 1 漏洞 1 在未登录系统时 连续按5次shift键 弹出程序c windows system32 sethc exe 2 部分win7及win10系统在未进入
  • MAX232无RS232电平信号输出、MAX232/3232硬件设计电路、电荷泵电容、max3221电路

    调试MAX3221芯片过程中 经测试 电路的单片机的uart可以正常收发数据 可无论单片机怎么发送数据 max3221都没有输出RS232电平的信号 看了论坛上的留言 正常的RS232电路中 芯片 V V 引脚电压应该为一倍多将近两倍的Vc
  • 银行家算法例题

    银行家算法 Banker s Algorithm 是一个避免死锁 Deadlock 的著名算法 是由艾兹格 迪杰斯特拉在1965年为T H E系统设计的一种避免死锁产生的算法 它以银行借贷系统的分配策略为基础 判断并保证系统的安全运行 目录
  • 【PTA】乙级 前世档案

    前世档案 C语言 题干 大致思路 题干 大致思路 n个问题 m个玩家 所以共有2的次方种结果 对应第一个图中的树状图 先考虑一个玩家的回答 用s统计最后结果的序号 先让结果数num除以2 如果为y 则不做处理 如果为n 则令s num 依次
  • short s1 = 1;s1 =s1+1;有错而short s1 = 1; s1+=1正确,为何?

    s1 s1 1和s1 1是有区别的 s1 s1 1会错因为s1是short 而1是int 所以运算时会自动转换为int 再将int赋值给s1是需要强制转换 所以会错 JAVA规范上说e1 e2 实际上是 e1 T1 e1 e2 其中T1是e
  • STM32读取编码器数据(STM32-1)

    编码器 encoder 是将信号或数据进行编制 转换为可用以通讯 传输和存储的信号形式的设备 按照外形可以分为实心轴和空心轴 按照工作原理编码器可分为增量式和绝对式两类 增量式编码器是将位移转换成周期性的电信号 再把这个电信号转变成计数脉冲
  • 补码的基础知识

    数在计算机中如何表示 举例来说 8在计算机中表示为二进制的1000 那么 8怎么表示呢 很容易想到 可以将一个二进制位 bit 专门规定为符号位 它等于0时就表示正数 等于1时就表示负数 比如 在8位机中 规定每个字节的最高位为符号位 那么
  • 使用TensorFlow实现LSTM

    使用TensorFlow实现LSTM 使用Cell实现 以Cell方式实现LSTM import os import numpy as np import tensorflow as tf from tensorflow import ke
  • Ubuntu 配置第三方动态库的系统环境变量

    环境 ubuntu16 04 Qt5 7 1 简述 将第三方动态库配置到系统环境变量中 便于使用 步骤 1 将第三方动态库的头文件及 so 文件拷贝到桌面 RSAInclude文件夹 lib文件夹 2 进入桌面文件夹 打开命令框 3 输入命
  • PHP上传Excel-xls-xlsx

    PHP上传Excel xls格式和xlsx格式 PHPExcle插件 引入插件 require once assets PHPExcel 1 8 Classes PHPExcel php 视图层代码
  • 安装TomCat的艰辛历程

    学习Java的初级阶段 是个充满无奈与呵呵的时间 就安装一个TomCat我就安装了一晚上 还没有成功 所以我给我的 捉猫泪史 写个传 以免后来者重蹈覆辙 首先 安装TomCat之前 先将Java环境搭好 就是下载并安装Java develo
  • Porter-Duff compositing rules

    1984 年 7 月 计算机图形 杂志 18 期 253 259 页 刊登了Porter Thomas 和 Duff Tom 的论文 Compositing Digital Ima ges 文中讲述了12个合成规则 这些规则都是基于一些简单