Krita源码分析(二):Pigment Library(色彩空间库)

Pigment简介

Pigment颜料是一个具有可插拔色彩空间的色彩操纵系统。颜色空间可以基于LCMS1,也可以使用颜色转换语言的OpenGTL2隐含,两者都是可选的。
颜料色彩空间提供了对许多常见操作和像素组合的支持。色素的运行依靠字节数组:颜色空间根据每个颜色空间定义的像素格式将字节数组解释为一个像素。

名称空间列表

什么是名称空间(namespace)以及为什么需要名称空间

以下内容摘自菜鸟教程,链接:https://www.runoob.com/cplusplus/cpp-namespaces.html

假设这样一种情况,当一个班上有两个名叫 Zara
的学生时,为了明确区分它们,我们在使用名字之外,不得不使用一些额外的信息,比如他们的家庭住址,或者他们父母的名字等等。

同样的情况也出现在 C++ 应用程序中。例如,您可能会写一个名为 xyz() 的函数,在另一个可用的库中也存在一个相同的函数
xyz()。这样,编译器就无法判断您所使用的是哪一个 xyz() 函数。

因此,引入了命名空间这个概念,专门用于解决上面的问题,它可作为附加信息来区分不同库中相同名称的函数、类、变量等。使用了命名空间即定义了上下文。本质上,命名空间就是定义了一个范围。

我们举一个计算机系统中的例子,一个文件夹(目录)中可以包含多个文件夹,每个文件夹中不能有相同的文件名,但不同文件夹中的文件可以重名。

定义名称空间的示例

以下代码复制自菜鸟教程,链接:https://www.runoob.com/cplusplus/cpp-namespaces.html

#include <iostream>
using namespace std;
 
// 第一个命名空间
namespace first_space{
   void func(){
      cout << "Inside first_space" << endl;
   }
}
// 第二个命名空间
namespace second_space{
   void func(){
      cout << "Inside second_space" << endl;
   }
}
int main ()
{
 
   // 调用第一个命名空间中的函数
   first_space::func();
   
   // 调用第二个命名空间中的函数
   second_space::func(); 
 
   return 0;
}

Pigment下的命名空间

在这里插入图片描述
在github 的 gotoFile处搜索namespace,可以看到
KritaNamespace.h和KritaNamespace.cpp,这两个文件应该就是定义了各个namespace的地方(看了一下,并不是…)
由于git clone 速度极慢,所以不能在本地查找,后续再搜索。

好吧,不用搜索了,在KoCompositeOps.h里找到了
在这里插入图片描述
看来KoComposite.h这个文件是最主要的文件

_Private

在这里插入图片描述
_Private中定义了一些结构体
每一个结构体中又声明了一些变量和函数
这些结构体中的函数都没有在结构体中给出函数体,而是全部在KoCompositeOps.h中进行实现

Arithmetic

Ko

KoStreamedMathFunctions

Vc

名称空间成员

名称空间成员就是名称空间列表中各个名称空间中所含有的成员


  1. LCMS,即littlecms,一个开源的色彩管理引擎,官网:http://www.littlecms.com/ ↩︎

  2. OpenGTL(官方文档好像写成OpenCtl了orz),Graphics Transformation Languages,是一组库,用于在图形应用程序中使用和集成转换算法(如滤镜或颜色转换)。官方网站:http://wwww.opengtl.org/ ↩︎

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值