PPM简介

学习图形学时为了直观地观察结果,需要输出图片,而PPM是一种最简单的图片格式,非常适合新手使用。

PPM文件的内容大概是这样的:

第一行固定为P3,代表写入的是PPM格式的RGB图像,除此之外还有PBM和PGM格式分别对应P1和P2,代表单色图和灰度图。

第二行两个整数代表图片的宽度高度

第三行代表像素值范围,通常写为255,代表每个颜色通道的值在0-255之间。

接下来每行三个整数代表一个像素各个颜色通道的值,总共有宽度*高度行。

顺序按照从左上角开始,每行从左往右,然后从上往下逐行填充。

用C++输出PPM图片的示例代码

int main()
{
ofstream OutImage;
OutImage.open("Image.ppm");
int nx = 200;
int ny = 100;
OutImage << "P3\n" << nx << ' ' << ny << "\n255\n";
for(int i = ny-1; i >= 0; i--)
{
for (int j = 0; j < nx; j++)
{
float r = (float)j / nx;
float g = (float)i / ny;
float b = 0.2;
int ir = int(255.99 * r);
int ig = int(255.99 * g);
int ib = int(255.99 * b);
OutImage << ir << ' ' << ig << ' ' << ib << '\n';
}
}
return 0;
}

最后要查看PPM格式的图片需要支持该格式的图片查看器,我使用的是XnView。

结果:

PPM格式十分简单,方便新手入门,如果想输出更通用的png格式的话,可以使用milo大神的png函数:https://zhuanlan.zhihu.com/p/26525083

C++ 输出PPM格式图片文件的更多相关文章

  1. 写文件的工具类,输出有格式的文件(txt、json/csv)

    import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io. ...

  2. 如何将位图格式图片文件(.bmp)生成geotiff格式图片?

    一.位图格式信息 位图BITMAPINFOHEADER 与BITMAPFILEHEADER: 先来看BITMAPINFOHEADER,只写几个主要的 biSize包含的是这个结构体的大小(包括颜色表) ...

  3. bmp格式图片文件读取

    C++读取bmp图片 #include <windows.h> #include <stdio.h> #include <stdlib.h> #include &l ...

  4. PHP 动态输出 svgz 格式图片

    使用PHP动态生成SVGZ图片(gzip压缩的SVG) 经测试SVG的动画性能很差,简单的动画CPU都能占到 30%左右. 可能的用途: 动态天气图片 访问统计计数图片 文字验证生成 动态头像 静态外 ...

  5. 使用Aspose.Words将Word文档转换为Tiff格式图片文件

    用Aspose组件的优点是操作Word文档不需要安装Office就可以实现. 首先需要引用Aspose.Words.dll,链接地址:链接:https://pan.baidu.com/s/1rJvjp ...

  6. 输出UTF-8-BOM格式的文件

    File localDir = new File(localPath); if(!localDir.exists()){ localDir.mkdirs(); } File file = new Fi ...

  7. PPM格式解析

    PPM格式其实就是RGB数据加上一个简单的文件头, 文件头部表示了图像的宽度和高度以及最大的RGB值. 文件头+rgb数据: P6\n width height\n 255\n rgbrgb... 其 ...

  8. EF+LINQ事物处理 C# 使用NLog记录日志入门操作 ASP.NET MVC多语言 仿微软网站效果(转) 详解C#特性和反射(一) c# API接受图片文件以Base64格式上传图片 .NET读取json数据并绑定到对象

    EF+LINQ事物处理   在使用EF的情况下,怎么进行事务的处理,来减少数据操作时的失误,比如重复插入数据等等这些问题,这都是经常会遇到的一些问题 但是如果是我有多个站点,然后存在同类型的角色去操作 ...

  9. vsim仿真VHDL输出fsdb格式文件

    vsim(modelsim)仿真VHDL输出fsdb格式文件 1.Dump准备 (1) 将下列设置放到顶层testbench tb.vhd文件中[注意放置的位置:关系如图] library novas ...

随机推荐

  1. JAVA数据结构和算法 1-综述:数据结构和数据类型

    数据结构:指数据在计算机内存空间中或者磁盘中的组织形式. 对于数据结构的操作:插入.删除.查找.迭代遍历.排序等: Java.util包中含有诸如向量(一个可扩充的数组).栈.哈希表等类型的数据结构, ...

  2. JPEG与JPEG2000

    JPEG与JPEG2000 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 背景介绍 JPEG 全名为 Joint Photographic Experts ...

  3. csu 1898: 复盘拉火车

    1898: 复盘拉火车 Submit Page   Summary   Time Limit: 1 Sec     Memory Limit: 128 Mb     Submitted: 114    ...

  4. [转帖]Pivotal Greenplum 6.0 新特性介绍

    Pivotal Greenplum 6.0 新特性介绍 https://cloud.tencent.com/developer/news/391063 原来 greenplum 也是基于pg研发的. ...

  5. Linux(CentOS 7)下安装postgres

    事情背景:需要在Linux上安装postgres数据库,但安装目录想直接指定,所以想通过源码编译安装pg 首先下载源码安装包.源码下载地址:https://github.com/postgres/po ...

  6. TypeScript 类型推导及类型兼容性

    类型推导就是在没有明确指出类型的地方,TypeScript编译器会自己去推测出当前变量的类型. 例如下面的例子: let a = 1; 我们并没有明确指明a的类型,所以编译器通过结果反向推断变量a的类 ...

  7. python学习-22 字符串格式化

    格式化包括:百分号方式和format方式 1.百分号 - %s   (%.4s   表示截取了4个字符) 传单个值: 例如: print('i am %s sex boy is ljj'%123) 运 ...

  8. Python【HTTP响应状态码】

    # HTTP响应状态码 ## 1xx:临时响应 #### 表示临时响应并需要请求者继续执行操作的状态代码. 100   **继续**请求者应当继续提出请求.服务器返回此代码表示已收到请求的第一部分,正 ...

  9. sublime text 2 + Dev-C++/MinGW 组合配置更方便快捷的 C/C++ 编译环境

    首先看一下配置后的效果: 1.直接在底部文本框中显示运行结果(不需要从键盘输入的时候使用): 2.在cmd中运行结果(需要从键盘输入的时候使用): 快捷键说明: 运行: 在底部文本栏显示结果:Ctrl ...

  10. node 标准输入流和输出流

    使用node 在 CMD 控制台获取输入的指令: 方式一: process.stdin.resume(); process.stdin.setEncoding('utf-8'); process.st ...