// Add.C
// Copyright (c) 2009 The Foundry Visionmongers Ltd. All Rights Reserved. static const char* const HELP = "Adds a constant to a set of channels"; #include "DDImage/PixelIop.h" \\导入像素处理器头文件,该头文件用于对像素进行操作
#include "DDImage/Row.h"
#include "DDImage/Knobs.h" using namespace DD::Image; class Add : public PixelIop
{
float value[4]; \\定义一个包含四个浮点类型变量的列表
public: \\定义公有函数
void in_channels(int input, ChannelSet& mask) const; \\定义一个无返回值无类型的in_channels成员函数,该成员函数类型是const
Add(Node* node) : PixelIop(node) \\该Add类继承PixelIop类
{
value[0] = value[1] = value[2] = value[3] = 0; \\初始化value列表
}
bool pass_transform() const { return true; } \\定义公有成员函数
void pixel_engine(const Row &in, int y, int x, int r, ChannelMask, Row & out); \\调用公有函数,该成员函数来自PixelIop类
virtual void knobs(Knob_Callback); \\定义成员函数,该成员函数继承自PixelIop类
static const Iop::Description d; \\定义一个静态函数d,该函数用于描述Add类的属性
const char* Class() const { return d.name; } \\
const char* node_help() const { return HELP; }
void _validate(bool);
}; void Add::_validate(bool for_real)
{
copy_info();
for (unsigned i = 0; i < 4; i++) {
if (value[i]) {
set_out_channels(Mask_All);
info_.black_outside(false);
return;
}
}
set_out_channels(Mask_None);
} void Add::in_channels(int input, ChannelSet& mask) const
{
// mask is unchanged
} void Add::pixel_engine(const Row& in, int y, int x, int r,
ChannelMask channels, Row& out)
{
foreach (z, channels) {
const float c = value[colourIndex(z)];
const float* inptr = in[z] + x;
const float* END = inptr + (r - x);
float* outptr = out.writable(z) + x;
while (inptr < END)
*outptr++ = *inptr++ + c;
}
} void Add::knobs(Knob_Callback f) \\定义一个无返回值的函数来添加colorknob
{
AColor_knob(f, value, IRange(0, 4), "value"); \\添加一个颜色knob
} #include "DDImage/NukeWrapper.h" static Iop* build(Node* node) { return new NukeWrapper(new Add(node)); } \\把Add类打包成节点
const Iop::Description Add::d("Add", "Color/Math/Add", build); \\添加相关属性

NDK学习笔记(Add.cpp注释)(一)的更多相关文章

  1. NDK学习笔记(三):DynamicKnobs的机制

    最近的NDK开发涉及到了动态input及动态knobs的问题. 开发需求如下:建立一个节点,该节点能获取每一个input上游的inputframerange信息. 具体下来就是:需要Node的inpu ...

  2. NDK学习笔记(四):OutputContext机制

    首先NDK文档中的Op.h头文件中已经有了相关概念的解释,摘录翻译如下: /*! \fn const OutputContext& Op::outputContext() const; The ...

  3. NDK学习笔记-JNI多线程

    前面讲到记录到ffmpeg音视频解码的时候,采用的是在主线程中进行操作,这样是不行的,在学习了POSIX多线程操作以后,就可以实现其在子线程中解码了,也可以实现音视频同步了 简单示例 在native实 ...

  4. NDK学习笔记-使用现有so动态库

    前面将的都是如何使用C/C++文件生成so动态库,那么在使用别人的so动态库的时候应该怎么做呢?这篇文章就是使用一个变声功能的动态库,完成对于以有so动态库的说明. 动态库来源 在互联网中,有着许许多 ...

  5. NDK学习笔记-增量更新

    虽然现在有插件化开发和热修复,但为何还需要增量更新?插件化开发和热修复依赖于宿主程序,增量更新适合更新宿主程序. 差分包生成的前提 差分包的生成依赖于BsDiff开源项目,而BsDiff又依赖于Bzi ...

  6. NDK学习笔记-NDK开发流程

    本文主要是说明一下在eclipse下如何对NDK进行配置 配置NDK 虽然现在基本上都使用Android Studio进行Android开发,但一些项目在eclipse中仍有运用,这里讲一讲eclip ...

  7. NDK学习笔记-C语言

    本文简要回顾了C语言的一些注意事项和理解细节,不再赘述C语言的所有语法 头文件 头文件作为引入文件,在编译的时候,加载到源代码,参与编译 在VS2013中可以看到,当引入头文件时候,只能看到函数的声明 ...

  8. Python爬虫初学者学习笔记(带注释)

    一,安装编程工具并进入编程界面 首先去https://www.continuum.io/downloads/网站下载Anaconda工具并安装;打开cmd,输入jupyter notebook并回车( ...

  9. NDK学习笔记(五)Reader机制

    针对每一种后缀名Nuke都提供了对应的模块.为了决定用哪个版本的reader或writer模块,Nuke会先解析文件后缀名再以此为依据调用相关模块. 以JPG为例: 该文件格式有两种后缀名:.jpg和 ...

随机推荐

  1. gcc/g++ 使用 tricks

    0. 优化级别 -O0,不进行优化的编译后的文件大小反而更小,小于 -O2 的: 1. -std 指定 C 语言标准 -ansi -ansi == -std=c90 -std=c99:(std:sta ...

  2. 清除chrome浏览器HSTS缓存

    如果你的网站启用了HSTS 在chrome中会用缓存效果,即使你的站点取消了HSTS,下次访问时,仍旧会自动给你重定向到HSTS. 那么如何清除 HSTS呢? chrome://net-interna ...

  3. 【leetcode】14-LongestCommonPrefix

    problem Longest Common Prefix 挨个比较每个字符串的元素是否相同,连续对应位置字符都相同,则为共同字符:否则不是. code class Solution { public ...

  4. Cocos2dx 中的点击事件

    简单记录一下2dx的鼠标交互事件.以及精灵绑定盒的点击判定   Layer 子类的 init方法中:   auto listener = EventListenerTouchOneByOne::cre ...

  5. 软工实践——结对作业2【wordCount进阶需求】

    附录: 队友的博客链接 本次作业的博客链接 同名仓库项目地址 一.具体分工 我负责撰写爬虫爬取信息以及代码整合测试,队友子恒负责写词组词频统计功能的代码. 二.PSP表格 PSP2.1 Persona ...

  6. java-接口的概述及其特点

    1.接口概述: - 从狭义的角度讲就是指java中的interface - 从广义的角度讲对外提供规则的都是接口 2.接口特点: - 接口中定义的全都是抽象方法. - 接口用关键字interface表 ...

  7. MySQL数据库-外键链表之一对多,多对多

    外键链表之一对多 外键链表:就是a表通过外键连接b表的主键,建立链表关系,需要注意的是a表外键字段类型,必须与要关联的b表的主键字段类型一致,否则无法创建索引 一对多:就是b表的某一个字段值对应a表外 ...

  8. UVA11077 Find the Permutations

    题意 PDF 给出1~n的一个排列,可以通过一系列的交换变成{1,2,-,n}.比如{2,1,4,3}需要两次交换.给定n和k,统计有多少个排列至少需要k次交换才能变成{1,2,-,n}. 分析 将给 ...

  9. Nginx:承受3万并发连接数,胜过Apache 10倍

    编者按:Nginx是目前比较重要的开源性负载均衡技术,新浪.网易.六间房等很多网站都将Nginx部署进自己的网站系统架构,并解决部分问题.本文是作者长期的实战经验,很有参考价值. 本文是我撰写的关于搭 ...

  10. redis源码之压缩列表ziplist

    压缩列表ziplist1.简介连续,无序的数据结构.压缩列表是 Redis 为了节约内存而开发的, 由一系列特殊编码的连续内存块组成的顺序型(sequential)数据结构. 2.组成 属性 类型 长 ...