首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建二维数组以输出pmm文件C++。

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

Stack Overflow用户
提问于 2013-01-16 05:19:31
回答 2查看 1.5K关注 0票数 0

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

当设置像素(i,j)的颜色时,需要生成一个指定宽度和高度的ppm文件,其值为:

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

对于RGB颜色,您可能需要使用以下结构:

代码语言:javascript
复制
struct RGB {
    float r;
    float g;
    float b;
};

数组中的每个元素都在0.0、1.0的范围内,在写入文件之前必须转换为0,255。

这是和我一样多的信息。我真的失去了他真正想让我做的事。对于更有经验的人来说,这可能是足够的信息,但对我来说却不是。有人能详细说明一下吗。另外,第一个公式/代码片段到底是做什么的?

我仍然不知道i和j是什么,公式是什么,也不知道如何生成写到RGB!??的2d数组的值。

EN

回答 2

Stack Overflow用户

发布于 2013-01-16 05:59:14

PPM是非常简单的位图格式,你基本上已经在你的问题中描述过了。若要查看更多细节,请在谷歌上搜索或退出http://netpbm.sourceforge.net/doc/ppm.html

从范围0.0 ..。1.0到0 .您只需对每个像素分量执行255.0的乘法运算。

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

第一个代码片段告诉您如何生成图片。它基本上意味着颜色是白色的,如果右边的第四位在i和j坐标上是不同的,如果它们是相同的,则是黑色。这应该会生成一个16乘16平方的棋盘图案。

票数 1
EN

Stack Overflow用户

发布于 2013-01-16 05:57:48

在第一个公式中,您将不会得到在0 1范围内的值,而是只得到0s1s,因为运算符==返回truefalse (在位的表示中为0或1)。大于0和/或1的操作XOR (^)也将返回0或1。

这是一个用于异或操作的真值表

代码语言:javascript
复制
-----------------
| a | b | a ^ b |
-----------------
| 0 | 0 |   0   |
-----------------
| 0 | 1 |   1   |
-----------------
| 1 | 0 |   1   |
-----------------
| 1 | 1 |   0   |
-----------------

从范围0 1到0 255的转换只不过是将值乘以255。

代码语言:javascript
复制
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;
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14351831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档