Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 创建二维数组以输出pmm文件C++;_C++_Arrays_Rgb_Ppm - Fatal编程技术网

C++ 创建二维数组以输出pmm文件C++;

C++ 创建二维数组以输出pmm文件C++;,c++,arrays,rgb,ppm,C++,Arrays,Rgb,Ppm,给我的指示非常模糊,我完全不知道该怎么做。我需要一些帮助。我会尽力解释,希望有人能帮我 当您使用col值设置像素(I,j)的颜色时,我需要生成指定宽度和高度的ppm文件,如下所示: float col=float((i&0x08)==0)^((j&0x08)==0)) 您可能希望对RGB颜色使用以下结构: struct RGB { float r; float g; float b; }; 数组中的每个元素都在[0.0,1.0]范围内,在写入文件之前必须转换为[0,25

给我的指示非常模糊,我完全不知道该怎么做。我需要一些帮助。我会尽力解释,希望有人能帮我

当您使用col值设置像素(I,j)的颜色时,我需要生成指定宽度和高度的ppm文件,如下所示:

float col=float((i&0x08)==0)^((j&0x08)==0))

您可能希望对RGB颜色使用以下结构:

struct RGB {
    float r;
    float g;
    float b;
};
数组中的每个元素都在[0.0,1.0]范围内,在写入文件之前必须转换为[0,255]

这是我所掌握的信息量。我真的不知道他到底想让我做什么。这可能对更有经验的人来说是足够的信息,但对我来说不是。有人能详细说明一下吗。还有,第一个公式/代码片段到底做了什么


我仍然不知道I和j是什么,公式是用来做什么的,也不知道如何生成要写入RGB的2d数组的值

在第一个公式中,您不会得到[01]范围内的值,而只会得到
0s
1s
,因为运算符==返回
true
false
(位表示为0或1)。0和/或1上的XOR(^)操作也将返回0或1

这是XOR操作的真值表

-----------------
| a | b | a ^ b |
-----------------
| 0 | 0 |   0   |
-----------------
| 0 | 1 |   1   |
-----------------
| 1 | 0 |   1   |
-----------------
| 1 | 1 |   0   |
-----------------
从范围[01]到[0255]的转换只是将值乘以255

void convertTo_255( struct RGB * array, size_t count {
    for ( size_t i = 0; i < count; i++ ) {
        array[ i ].r *= 255;
        array[ i ].g *= 255;
        array[ i ].b *= 255;
    }
void convertTo_255(结构RGB*数组,大小\u t计数{
对于(大小i=0;i
PPM是一种非常简单的位图格式,您已经在问题中对其进行了基本描述。要查看更多详细信息,请用谷歌搜索或切掉它

要从范围[0.0..1.0]转换到[0..255],只需对每个像素组件执行255.0的乘法

总结:将ppm头写入文件,迭代所有像素,将其分量乘以255,转换为INTERVER,以文本形式写入文件。文件中的所有值都用空格分隔


第一个代码片段告诉您如何生成图片。它基本上意味着,如果右侧第四位在i和j坐标中不同,则颜色为白色,如果它们相同,则颜色为黑色。这将生成一个16×16正方形的棋盘格图案。

这是创建/生成结构RGB数组并生成在编译后无法设置数组的大小时,如何使用从命令行传入的维度创建数组。I和j值是什么?
I
j
是您希望设置的像素坐标。如您所述:“*当您设置像素的颜色(I,j)时”值col如所示:
float col=float((i&0x08)==0)^((j&0x08)==0));
“我觉得自己像个白痴,因为我已经完成了大部分的设置并工作了,感谢所有的帮助。