最近在一直在研究OpenEXR这个软件。这个软件的图像输出机制很有意思,特地分享一下学习心得,就当是笔记了。

我的OpenEXR软件版本是2.2.0,系统平台是win7。

安装完毕OpenEXR之后我们可以在../vc/share/doc/OpenEXR-2.2.0中找到一个名为ReadingAndWritingImageFiles.pdf的帮助文档,在这个文档的Using the RGBA-only Interface for Scan Line Based Files章节中提供了这样一个例子:

 void writeRgba1 (const char fileName[],
const Rgba *pixels,
int width,
int height)
{
RgbaOutputFile file(fileName,width,height,WRITE_RGBA); //
file.setFrameBuffer(pixels,,width); //
file.writePixels(height); //
} struct Rgba
{
half r;
half g;
half b;
half a;
}

代码第一行声明了一个输出函数,有四个参数,fileName是文件名,pixels是一个指向Rgba结构体的指针,Rgba结构体在第十一行有相关定义。width和height就是显示宽高及数据宽高了。这四个值会存储到该文件的header中。

第6行中定义了一个名为file的RgbaOutputFile对象,WRITE_RGBA表示输出结果为包含rgba四个half类型的通道。

第7行的setFrameBuffer()方法开始为file类的执行过程分配内存,会将扫描到的像素指针地址存储到相应的内存地址中,1表示只扫描当前行,width表示在当前行上的扫描宽度。如果某像素的坐标为pixel(x,y),那么该像素坐标的指针的内存地址为:pixels+ 1*x+width*y。通过这个计算式可以很容易找到某像素指针的地址。这也是C++直接与硬件对话的一个体现。

第8行的writePixels()方法会将内存中存储的多少行数据写入到具体文件中,height表示有多少行会被写入文件。该方法默认不会把所有行都输出,所以需要通过height参数指定一下。很多软件设计成渲染多少行就显示多少行,通过对height值的使用可以灵活应对各种需求。

IlmImf库中允许扫描从上至下或者从下至上,这个属性会保存在header中,名为:INCREASING_Y和DECREASING_Y,该属性默认为从上到下扫描,即INCREASING_Y。为什么这样设置,因为OpenEXR也是基于OpenGL的,OpenGL就是默认坐标原点在画面左上角,所以INCREASING_Y就是从上往下扫描。

这个笔记主要用来提醒自己OpenEXR与OpenGL之间的关系,不仅在坐标系上两者一致,在很多特点上也是如此,今后OpenEXR的学习完全可以贯穿到OpenGL的学习中,举一反三,形成一个基本的思维体系吧。

为什么要学习OpenEXR呢,首先当前大部分软件都有对该标准的支持,而且该标准将来会成为高端图像行业的趋势,毕竟ILM的号召力不是盖的。

掌握该标准,CG的基础才能扎实,而不是流于表面。

OpenEXR的输出机制的更多相关文章

  1. OpenEXR的采样机制

    OpenEXR的输出机制是无损的,这样做会受到部分低配置电脑存储及运算带宽的限制. 当前有很多针对图像的压缩算法来解决这个问题,OpenEXR另外提供了WRITE_YC这种存储方式,这种方式会将RGB ...

  2. Cocos2d-x之Log输出机制

    |   版权声明:本文为博主原创文章,未经博主允许不得转载. 在cocos2d-x中,我们使用log这个函数进行输出,log可以输出很多参数,它的使用方式就和使用c语言中的printf的使用方式差不多 ...

  3. 痞子衡嵌入式:浅析IAR下调试信息输出机制之硬件UART外设

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是IAR下调试信息输出机制之硬件UART外设. 在嵌入式世界里,输出打印信息是一种非常常用的辅助调试手段,借助打印信息,我们可以比较容易地 ...

  4. 痞子衡嵌入式:浅析IAR下调试信息输出机制之半主机(Semihosting)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是IAR下调试信息输出机制之半主机(Semihosting). 在嵌入式世界里,输出打印信息是一种非常常用的辅助调试手段,借助打印信息,我 ...

  5. OpenEXR的读取机制

    这还是一篇学习笔记,知识重点还是领会完再敲一遍比较好. OpenEXR通过RgbaInputFile这个接口读取RGBA ONLY图像文件信息,该接口通过dataWindow()方法获取图像边界坐标信 ...

  6. clog,cout,cerr 输出机制

    clog:控制输出,使其输出到一个缓冲区,这个缓冲区关联着定义在 <cstdio> 的 stderr. cerr:强制输出刷新,没有缓冲区. cout:控制输出,使其输出到一个缓冲区,这个 ...

  7. C++中的cout输出机制

    代码: #include <iostream> using namespace std; int hello(){ cout<<"hello"<< ...

  8. Java的输入/输出操作

    Java的输入\输出机制 计算机的基本功能就是通过输入输出设备与外部其他设备尽心数据的交互,从其他设备读入数据叫做输入操作,将计算机内的数据写入到其他设备叫做输出操作.可以向计算机发送数据.又可以接受 ...

  9. Qt 日志输出

    Qt学习(3)日志输出 普通的打印输出 用 QtCreator 开发 Qt 程序时, 经常需要向控制台打印一些参数.有时候是查看对象的属性是否被正确设置,有时候是查看程序是否执行了某一段代码,或者执行 ...

随机推荐

  1. 如何在Power BI和Tableau之间进行选择?

    作者:Mike Gallucci 如今,当谈到商业智能(BI)分析软件时,有两个主要的行业领导者 - 微软的Power BI和Tableau.根据分析和业务平台的2018年Gartner Magic ...

  2. sql查询未走索引问题分析之查询数据量过大

    前因: 客户咨询,有一个业务sql(代表经常被执行且重要),全表扫描在系统占用资源很高(通过ash报告查询得到信息) 思路: 1.找到sql_text,sql_id 2.查看执行计划 3.查询sql涉 ...

  3. rebuild online 创建时,会话被Kill修复索引测试

    rebuild online 创建时,会话被Kill修复索引 1.0实验目的:日常运维经常create index online,但是期间被kill会导致索引再次创建失败,测试解决该问题 2.0测试流 ...

  4. INS-20802 Oracle Cluster Verification Utility failed解释说明

    背景:安装RAC,安装GI集群管理软件时,在最后快结束时,总是报如上INS-错误 #官方文档:error 说明;字符串解析失败 INS-20802: string failed. Cause: The ...

  5. MySQL的查询语句

    一.基本查询语句 1.1从单个表中查询列 语法:select 查询的列1,查询的列2  from 表名  where 条件 group by 分组条件  order by 排序条件  having  ...

  6. manjaro初体验

    manjaro Linux是https://distrowatch.com/网站上排名第一的Linux分支. https://manjaro.org/ 选择,下载,打开主页下载页:https://ma ...

  7. (0)MySQL 的指令(包含了解知识点)

    第七章索引:入门安装 - 增删改查基本操作 - 外键(不同表之间的关联) - 数据库的建立和操作 - MySQL的查询操作(模糊.通配.限制符等) - MySQL的引擎 - MySQL的事物(数据回滚 ...

  8. linux---文件颜色含义

    下面是linux系统约定不同类型文件默认的颜色: 白色:表示普通文件 蓝色:表示目录 绿色:表示可执行文件 红色:表示压缩文件 浅蓝色:链接文件 红色闪烁:表示链接的文件有问题 黄色:表示设备文件 灰 ...

  9. golang pprof 内存分析

    use pprof to get application  memory  useage add code in your main funciton import ( "log" ...

  10. Module Sources

    转自:https://www.terraform.io/docs/modules/sources.html 主要记录module source 的格式 The source argument in a ...