首页 > 其他分享 >0189-输出 PPM 图片

0189-输出 PPM 图片

时间:2024-07-16 09:31:56浏览次数:8  
标签:输出 0189 u64 ppm content WIDTH let PPM

环境

  • Time 2022-11-14
  • WSL-Ubuntu 22.04
  • Rust 1.65.0

前言

说明

参考:https://raytracing.github.io/books/RayTracingInOneWeekend.html

目标

编写一个简单的程序,输出一张 .ppm 格式的图片并查看。

ppm 格式

ppm 是一种用 ascii 字符来表示图片的方式。
具体内容参考:https://zh.wikipedia.org/wiki/PBM格式
其中 P3 表示是像素图,# 开头的是注释,不影响内容。
然后是宽度和高度,后面是最大颜色值,最后是每个像素的具体值。

Cargo.toml

[package]
edition = "2021"
name = "game"
version = "0.1.0"

[dependencies]

main.rs

fn main() {
    // 图片的宽和高
    const WIDTH: u64 = 256;
    const HEIGHT: u64 = 256;

    // 输出图片,第一行输出 P3,表示像素图
    let mut content = String::from("P3");
    // 输出宽和高,和最大颜色值
    content.push_str(&format!("\n{WIDTH} {HEIGHT}\n255\n"));

    for j in (0..HEIGHT).rev() {
        // 进度
        eprintln!("Scan lines remaining: {j}");
        for i in 0..WIDTH {
            let r = i as f64 / (WIDTH - 1) as f64; // Red
            let g = j as f64 / (HEIGHT - 1) as f64; // Green
            let b = 0.25; // Blue

            let ir = (255.999 * r) as u64;
            let ig = (255.999 * g) as u64;
            let ib = (255.999 * b) as u64;

            content.push_str(&format!("{ir} {ig} {ib}\n"));
        }
    }
    println!("{}", content);
    eprintln!("Done.");
}

输出

cargo run > image.ppm

效果

输出ppm图片

总结

编写程序,输出了一张 ppm 图片。

附录

标签:输出,0189,u64,ppm,content,WIDTH,let,PPM
From: https://www.cnblogs.com/jiangbo4444/p/18304514

相关文章

  • 第一百六十五节 Java IO教程 - Java标准输入/输出/错误流
    JavaIO教程-Java标准输入/输出/错误流我们可以使用System.out和System.err对象引用,只要我们可以使用OutputStream对象。我们可以使用System.in对象,只要我们可以使用InputStream对象。System类提供了三个静态设置器方法setOut(),setIn()和setErr(),以用您自己的设备替换这......
  • Linux查看某个进程的环境变量,以及重定向后的输出
    1.查看环境变量根据进程pid看,以121927号进程为例:cat/proc/121927/environ|tr'\0''\n'每个环境变量都以'\0'结束,直接cat会不方便查看,将'\0'替换为'\n'可以方便查看。注意,tr后必须加单引号,不然参数会被shell转义为0和n。或者可以:cat/proc/121927/environ|tr\\0\\n......
  • java List集合转Map并遍历输出
    1.使用流转map并且遍历packagecom.demo.toMap;importjava.util.ArrayList;importjava.util.List;importjava.util.Map;importjava.util.stream.Collectors;publicclassMianDemo{publicstaticvoidmain(String[]args){List<NodeList>list=......
  • SpinalHDL之模拟信号和输入输出
    本文作为SpinalHDL学习笔记第十五篇,记录使用SpinalHDL模拟信号相关API。SpinalHDL学习笔记总纲链接如下:SpinalHDL学习笔记_spinalhdlblackbox-CSDN博客可以使用Analog/inout功能定义三态信号。添加这些功能的原因有:•能够将三态信号添加到顶层(它避免了必须用一些手......
  • IO输入输出流例子:Java对象输出json文本:
    读取文件:原始字节输入流(低级):publicclassCharCacheIOReader{publicstaticvoidmain(String[]args){try(//原始字节输入流(低级)Readerfr=newFileReader("src\\OutputStream.txt");//创建一个字......
  • 1003:对齐输出
    ......
  • Linux 中 grep命令仅仅输出匹配的字符串
     001、[root@PC1test]#lsa.txt[root@PC1test]#cata.txt##测试数据aa33aa77bbaaaa22aakkccbbddaauu883388rrqq[root@PC1test]#grep-oP"aa"a.txt##输出仅仅匹配的内容,但是换行了aaaaaaaaaaaa[root@PC1test]......
  • 输出的魅力
    关于一份代码不同输出的不同结果。。(luogu能A)printf快写正常cout解绑cout就离谱......
  • MOS管的漏极能做输入吗,MOS管的栅极能做输出吗
    MOS管的漏极能做输入吗,MOS管的栅极能做输出吗MOS(Metal-Oxide-Semiconductor)管,特别是场效应晶体管(FET),通常不会将漏极(Drain)用作输入,也不会将栅极(Gate)用作输出。在基本的MOSFET设计中,漏极是一个电荷流过的路径,它连接到负载或电源,而栅极则是控制电流流动的电压节点。漏极是输出端:当......
  • 易优cms网站for功能:数据/记录循环输出标签(注:类似与volist、foreach标签)-Eyoucms
    【基础用法】名称:for功能:数据/记录循环输出标签(注:类似与volist、foreach标签)语法:{eyou:forstart='开始值'end='结束值'}{$i}{/eyou:for}php解析后的代码是:for($i=1;$i<100;$i+=1){echo$i;}参数:start=''开始值end=''结束值comparison=''比较操作符,默认是小于......