开源图形库Thor Vector Graphics:Paint类, Result、 CompositeMethod、 BlendMethod 枚举类型

0. 简介

  • 开源图形库Thor Vector Graphics的Paint类是一个用于绘制图形的API类,提供了各种功能来控制绘制对象的外观和行为。
  • 所属头文件:thorvg.h

1. 成员函数与使用方法

  • Result rotate(float degree) noexcept:设置对象的旋转角度。
    • 使用方法:传入旋转的角度值,以度为单位。
    • 注意事项:旋转角度是顺时针方向的,以水平轴为基准。
  • Result scale(float factor) noexcept:设置对象的缩放比例。
    • 使用方法:传入缩放因子,1 表示原大小,大于 1 表示放大,小于 1 表示缩小。
    • 注意事项:默认缩放因子为 1。
  • Result translate(float x, float y) noexcept:设置对象在二维空间中的平移。
    • 使用方法:传入水平和垂直方向的平移值。
    • 注意事项:坐标系的原点在画布的左上角。
  • Result transform(const Matrix& m) noexcept:设置对象的仿射变换矩阵。
    • 使用方法:传入 3x3 的仿射变换矩阵。
    • 注意事项:用于自定义对象的复杂变换。
  • Matrix transform() noexcept:获取对象的仿射变换矩阵。
    • 使用方法:调用该函数即可获取对象的当前变换矩阵。
    • 注意事项:如果没有应用任何变换,则返回单位矩阵。
  • Result opacity(uint8_t o) noexcept:设置对象的不透明度。
    • 使用方法:传入不透明度值,范围在 0 到 255 之间,0 表示完全透明,255 表示完全不透明。
    • 注意事项:改变不透明度可能需要多次渲染过程。
  • Result composite(std::unique_ptr<Paint> target, CompositeMethod method) noexcept:设置对象的合成目标对象和合成方法。
    • 使用方法:传入目标对象的指针和合成方法。
    • 注意事项:目标对象的所有变换和属性将被应用于当前对象。
  • Result blend(BlendMethod method) const noexcept:设置对象的混合方法。
    • 使用方法:传入混合方法。
    • 注意事项:这是一个实验性的 API。
  • Result bounds(float* x, float* y, float* w, float* h, bool transformed = false) const noexcept:获取对象的轴对齐边界框。
    • 使用方法:传入指向 float 变量的指针,用于接收边界框的坐标和尺寸。
    • 注意事项:如果设置了 transformed 参数为 true,则会考虑对象的变换。
  • Paint* duplicate() const noexcept:复制对象。
    • 使用方法:调用该函数创建并返回一个新的对象,其属性与原对象相同。
    • 注意事项:如果复制失败,则返回 nullptr。
  • uint8_t opacity() const noexcept:获取对象的不透明度值。
    • 使用方法:调用该函数即可获取当前对象的不透明度值。
  • CompositeMethod composite(const Paint** target) const noexcept:获取对象的合成目标对象和合成方法。
    • 使用方法:传入指向指针的指针,用于接收目标对象的指针。
    • 注意事项:返回合成方法。
  • BlendMethod blend() const noexcept:获取对象的混合方法。
    • 使用方法:调用该函数即可获取当前对象的混合方法。
    • 注意事项:这是一个实验性的 API。
  • uint32_t identifier() const noexcept:返回对象的唯一标识符。
    • 使用方法:调用该函数即可获取当前对象的类型标识符。
    • 注意事项:可用于检查对象的具体实例类型。

1.1 Result枚举类型

Result 枚举类型用于表示 API 的执行结果。

  • Success:表示请求正确执行的返回值。即在正常情况下,API 调用成功完成了其预期的任务。
  • InvalidArguments:表示在调用 API 时提供的参数有问题,例如传递了空路径或空指针等无效参数。这通常意味着调用者需要修正提供给 API 的参数。
  • InsufficientCondition:表示请求无法处理的情况。例如,尝试查询一个不存在的对象的属性,或者在某种不满足条件的情况下执行请求。这可能需要调用者在尝试再次请求之前采取额外的步骤或检查。
  • FailedAllocation:表示内存分配失败的情况。这可能发生在动态内存分配时,无法分配足够的内存以满足请求。这通常需要调用者处理内存分配失败的情况,可能需要释放其他资源或减少内存需求。
  • MemoryCorruption:表示内存损坏的情况。这可能发生在指针释放或类型转换等内存操作时发生错误的情况。这需要调用者检查内存操作的正确性,并确保没有发生内存损坏。
  • NonSupport:表示选择了不支持的选项。即在执行请求时,选择了当前环境不支持的选项或功能。这可能需要调用者选择其他选项或执行其他操作。
  • Unknown:表示所有其他情况。这是一个通用的返回值,用于表示无法归类到其他特定情况的情况。这可能需要调用者进一步检查和处理特定情况。

1.2 CompositeMethod枚举类型

CompositeMethod枚举用于指示两个对象(源对象和目标对象)在合成过程中所使用的方法。

  • None:表示没有应用任何合成。即在合成过程中不对源对象和目标对象进行任何操作,直接渲染源对象。
  • ClipPath:表示取源对象和目标对象的交集,只渲染交集部分的源对象像素。
  • AlphaMask:表示使用目标对象的像素作为alpha值进行alpha蒙版。
  • InvAlphaMask:表示使用目标对象像素的补集作为alpha值进行alpha蒙版。
  • LumaMask:表示使用目标对象像素的灰度值(0.2125R + 0.7154G + 0.0721*B)进行alpha蒙版。
  • InvLumaMask:表示使用目标对象像素的补集的灰度值进行alpha蒙版。
  • AddMask:表示使用目标对象的alpha值组合目标和源对象的像素。(T * TA)+(S *(255 - TA))
  • SubtractMask:表示在考虑目标对象和源对象的目标alpha的情况下,从目标颜色中减去源颜色。(T * TA)-(S *(255 - TA))
  • IntersectMask:表示通过取目标alpha和源alpha的最小值,并将其与目标颜色相乘来计算结果。(T * min(TA, SA))
  • DifferenceMask:表示计算目标颜色与源颜色的绝对差值,乘以目标alpha的补集。(abs(T - S *(255 - TA)))

1.3 BlendMethod枚举类型

BlendMethod枚举表示了用于混合绘制对象的方法。

  • Normal:执行标准的alpha混合。如果源像素的alpha值等于255,则执行S混合;否则执行 (Sa * S) + (255 - Sa) * D
  • Add:简单地将两个图层的像素值相加。
  • Screen:对两个图层的像素值进行取反、相乘,然后再次取反。
  • Multiply:将顶层图层中每个像素的RGB通道值(0 到 255)与底层图层相应像素的值相乘。
  • Overlay:结合了MultiplyScreen混合模式的效果。
  • Difference:将顶层图层减去底层图层,或者相反,以始终得到非负值。
  • Exclusion:结果是顶层和底层像素的乘积的两倍减去它们的和。
  • SrcOver:用顶层图层替换底层图层。
  • Darken:创建一个像素,保留顶部和底部图层像素的最小分量。
  • Lighten:与Darken相反,保留顶部和底部图层像素的最大分量。
  • ColorDodge:将底层图层除以倒置的顶层图层。
  • ColorBurn:将倒置的底层图层除以顶层图层,然后再取反。
  • HardLight:与Overlay相同,但颜色角色相反。
  • SoftLight:与Overlay相同,但应用纯黑或纯白不会产生纯黑或纯白。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/684166.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

idea基础配置

配置jre 【file】->【Project Structure】 设置SDK设置Language level 【Settings】->【Build,Execution,Deployment】->【Compiler】->【Java Compiler】设置Project bytecode version&#xff1a; 配置maven 【Settings】->【Build,Execution,Deployment】…

25届Javaer在2023的打怪升级之路

开头说一下基本信息&#xff1a;25届Java&#xff0c;二本&#xff0c;科班 刚刚结束第二段实习&#xff0c;回家过年准备春招&#xff0c;浅浅记录一下过去的一年 开始的原因&#xff1a; 虽然很不想回忆&#xff0c;但是走上Java的道路还是和前女友有些关系。 在今年年初…

搜索引擎枚举

我们可以利用Google 语法搜索子域名&#xff0c;例如要搜索百度旗下的子域名就可以 使用 “site:baidu.com” 语法&#xff0c;如图1-5所示。 Google 新闻 购物 地图 我料的31,400.000条结集(用B时0.17秒) 百度知道全球最大中文互动问答平台 hitps /izhidao baidu…

vue3 之 商城项目—结算模块

路由配置 chekout/index.vue <script setup> const checkInfo {} // 订单对象 const curAddress {} // 地址对象 </script> <template><div class"xtx-pay-checkout-page"><div class"container"><div class"w…

医院三基怎么搜题答案? #学习方法#学习方法#微信

在大学生的学习过程中&#xff0c;遇到难题和疑惑是常有的事情。然而&#xff0c;随着互联网的普及和技术的发展&#xff0c;搜题和学习软件成为了大学生们解决问题的利器。今天&#xff0c;我将向大家推荐几款备受大学生喜爱的搜题和学习软件&#xff0c;帮助我们更好地应对学…

分层钱包HD钱包

bc1 开头的通常指的是比特币&#xff08;Bitcoin&#xff09;的地址&#xff0c;这种格式遵循了比特币改进提案BIP 0173中定义的Bech32编码格式。Bech32地址也被称为"SegWit"地址&#xff0c;它们支持Segregated Witness功能&#xff0c;这是比特币网络为了提高区块链…

新冠:2022和2024两次新冠感染的对比

第一次 2022年底第一次放开管控&#xff0c;95%以上的人都感染了一次奥密克戎 症状 第一天&#xff1a;流涕&#xff0c;咽痛。 第二天&#xff1a;高烧40度&#xff0c;全身疼痛&#xff0c;动不了。没有胃口&#xff0c;头晕想吐。 吃了白加黑退烧药&#xff0c;清开灵颗粒…

python系统学习Day2

section3 python Foudamentals part one&#xff1a;data types and variables 数据类型&#xff1a;整数、浮点数、字符串、布尔值、空值 #整型&#xff0c;没有大小限制 >>>9 / 3 #3.0 >>>10 // 3 #3 地板除 >>>10 % 3 #1 取余#浮点型&#xff…

现阶段适用于 单一架构 还是 分布式架构 ?

单体架构&#xff1a; 优势&#xff1a;简单直接&#xff0c;易于理解和开发&#xff0c;适用于小型应用或刚刚开始的项目。劣势&#xff1a;扩展性受限&#xff0c;只能通过增加服务器的数量来提高处理能力&#xff1b;所有模块都部署在一个单独的服务器或容器中&#xff0c;…

Linux实用指令

Linux实用指令 1.指定运行级别 运行级别说明&#xff1a; 0 &#xff1a;关机 1 &#xff1a;单用户【找回丢失密码】 2&#xff1a;多用户状态没有网络服务 3&#xff1a;多用户状态有网络服务 4&#xff1a;系统未使用保留给用户 5&#xff1a;图形界面 6&#xff1a;系统重…

MySQL5.7升级到MySQL8.0的最佳实践分享

一、前言 事出必有因&#xff0c;在这个月的某个项目中&#xff0c;我们面临了一项重要任务&#xff0c;即每年一次的等保测评整改。这次测评的重点是Mysql的一些高危漏洞&#xff0c;客户要求我们无论如何必须解决这些漏洞。尽管我们感到无奈&#xff0c;但为了满足客户的要求…

Apache 神禹(shenyu)源码阅读(三)——被网关路由的后端服务 Client 向 Admin 注册的数据传输(Client端)

前言 在真正测试 Divide 插件时&#xff0c;想要知道后端服务&#xff08;以下称为 Client&#xff09;是如何将自己的信息注册到管理台&#xff08;以下称为 Client&#xff09;。这里后端服务用的是 shenyu 自带的 http 的例子&#xff0c;项目名字为 shenyu-examples-http。…

vue3的双向数据绑定原理和响应式原理以及和vue2响应式的区别

1.vue3的双向数据绑定原理是什么 响应式系统&#xff1a;Vue3的响应式系统是基于ES6的Proxy对象实现的。在初始化Vue实例时&#xff0c;Vue会对数据对象进行递归地遍历&#xff0c;将每个属性都转换为getter和setter。当属性被读取时&#xff0c;会触发getter函数&#xff0c;…

Android 13.0 SystemUI下拉状态栏定制二 锁屏页面横竖屏解锁图标置顶显示功能实现

1.前言 在13.0的系统rom定制化开发中,在关于systemui的锁屏页面功能定制中,由于在平板横屏锁屏功能中,时钟显示的很大,并且是在左旁边居中显示的, 由于需要和竖屏显示一样,所以就需要用到小时钟显示,然后同样需要居中,所以就来分析下相关的源码,来实现具体的功能 如图…

Imgui(3) | 基于 imgui-SFML 的 mnist 数据集查看器

Imgui(3) | 基于 imgui-SFML 的 mnist 数据集查看器 文章目录 Imgui(3) | 基于 imgui-SFML 的 mnist 数据集查看器0. 介绍1. 处理 mnist 数据集2. 显示单张图像和label2.1 显示单张图像2.2 点选列表后更新显示的图像2.3 显示 label2.4 使用完整的列表 总结 0. 介绍 把mnist数据…

每日一练:LeeCode-98、 验证二叉搜索树【二叉搜索树+DFS】

本文是力扣LeeCode-98、 验证二叉搜索树【二叉搜索树DFS】】 学习与理解过程&#xff0c;本文仅做学习之用&#xff0c;对本题感兴趣的小伙伴可以出门左拐LeeCode。 给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&am…

C#,巴都万数列(Padonve Number)的算法与源代码

1 巴都万数列&#xff08;Padovan Sequence&#xff09; 巴都万数列&#xff08;Padovan Sequence&#xff09;是一个整数数列。 首数个值为1, 1, 1, 2, 2, 3, 4, 5, 7, 9, 12, 16, 21, 28, 37 ... 此数列以建筑师理察巴都万命名&#xff0c;他的论文Dom&#xff08;1994年&a…

嵌入式CAN通信协议原理(下)

本篇文章结合实际CAN控制器继续介绍协议相关的内容&#xff0c;还有示例讲解。 好了&#xff0c;继续吧&#xff01; 二. STM32 CAN 控制器介绍 STM32 的芯片中具有 bxCAN 控制器 (Basic Extended CAN)&#xff0c;它支持 CAN 协议 2.0A 和 2.0B 标准。 该 CAN 控制器支持最…

Vi 和 Vim 编辑器

Vi 和 Vim 编辑器 vi 和 vim 的基本介绍 Linux 系统会内置 vi 文本编辑器 Vim 具有程序编辑的能力&#xff0c;可以看做是 Vi 的增强版本&#xff0c;可以主动的以字体颜色辨别语法的正确性&#xff0c;方便程序设计。 代码补完、编译及错误跳转等方便编程的功能特别丰富&…

读十堂极简人工智能课笔记03_遗传算法与进化

1. 寻找正确答案 1.1. 卡尔西姆斯 1.1.1. 计算机图形艺术家和研究者 1.1.2. 演示过数字进化之创造性和新颖性的先驱 1.1.3. 1994年 1.1.3.1. 创造一批能游泳、走路、跳跃&#xff0c;甚至互相竞争的虚拟动物震惊了整个科学界 1.1.3.2. 它们的人工大脑却是个极其复杂的网络…