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. Xena L23网络测试仪Valkyrie使用技巧100例:使用Xena官方在线演示设备 (编号00)

    需求# 1.新用户:没有硬件,想看看软件长什么样,好不好用,风格如何,怎么办? 2.代理商:没有硬件,想给客户Show一下Xena高大上的软件,怎么办? 3.老用户:邮件推送了新的软件版本,据说很多新 ...

  2. (一)MVC项目

    一.整体架构: 注:取自其他文章,最后的NewFile.html纯用于测试错误,完全不用. 二.具体代码: 1.User.java package common; public class User ...

  3. 成为java架构师的技能

    0: 数据结构算法 数组.链表.堆.栈.队列.Hash表.二叉树等; 算法思想:递推.递归.穷举.贪心.分治.动态规划.迭代.分枝界限; 排序查找 B+/B-数.红黑树.图等; 图的深度优先搜索.图的 ...

  4. rebbitMQ的实现原理

    引言 你是否遇到过两个(多个)系统间需要通过定时任务来同步某些数据?你是否在为异构系统的不同进程间相互调用.通讯的问题而苦恼.挣扎?如果是,那么恭喜你,消息服务让你可以很轻松地解决这些问题.消息服务擅 ...

  5. jQuery禁用input历史选择

    $("#id").attr("autocomplete", "off");

  6. Redis 初步接触

    Redis简介 Redis是什么 Redis是一个开源的,使用ANSI C 编写,高性能的Key-Value的NoSQL数据库. Redis特点 基于内存 可持久化数据 具有丰富的数据结构类型,适应非 ...

  7. PHP二维数组的引用赋值容易犯的错误

    大家一起来分析一下下面这段代码: <?php $arr = array(); $arr["abc"] = array("sex" => 100, & ...

  8. 《统计学习方法》极简笔记P4:朴素贝叶斯公式推导

    <统计学习方法>极简笔记P4:朴素贝叶斯公式推导 朴素贝叶斯基本方法 通过训练数据集 T={(x_1,y_1),(x_2,y_2),(x_N,y_N)...,(x_1,y_1)} 学习联合 ...

  9. 通过getAdaptiveExtension生成的动态类

    通过getAdaptiveExtension生成的动态类 方便调式使用 请放在根目录下

  10. SAS学习笔记37 宏程序中parmbuff选项

    该选项用于指定宏可以接受可变参数列表,而且参数值保存在SYSPBUFF宏变量中.parmbuff的参数价值,其实就是每次执行宏程序时,可以指定不同数量的参数值,这些宏参数被保存在&syspbu ...