所以,我必须创建一个ppm文件,它会给我意大利国旗的图像(从左到右依次为3个垂直条,绿色,白色,然后是红色)。并且图像必须是600乘400.(逐行)我尝试多次重写代码,但是,我的图像只是水平放置的三个条而不是垂直放置。而且,线条并不完全水平。但最大的问题是,为什么我的绿色,白色和红色条不垂直?非常感谢任何帮助。
这是我的代码:
#include <stdio.h>
int main() {
printf("P6\n");
printf("%d %d\n", 600, 400);
printf("255\n");
int height, widthGreen, widthWhite, widthRed, i, j;
unsigned char Rcolor, Bcolor, Gcolor;
widthGreen = 200;
widthWhite = 400;
widthRed = 600;
height = 400;
for (j = 0; j < height; j++) {
for (i = 0; i < widthGreen; i++) {
Rcolor = 0;
Gcolor = 128;
Bcolor = 0;
printf("%c%c%c", Rcolor, Gcolor, Bcolor);
}
}
for (j = 0; j < height; j++) {
for (i = 201; i <= widthWhite; i++) {
Rcolor = 255;
Gcolor = 255;
Bcolor = 255;
printf("%c%c%c", Rcolor, Gcolor, Bcolor);
}
}
for (j = 0; j < height; j++) {
for (i = 401; i <= widthRed; i++) {
Rcolor = 255;
Gcolor = 0;
Bcolor = 0;
printf("%c%c%c", Rcolor, Gcolor, Bcolor);
}
}
return (0);
}
答案 0 :(得分:0)
四件事:第一件事是在值之间添加空格。第二种是在每行之后添加换行符。第三种是将值打印为(无符号)整数,而不是字符,255
和128
都不会打印为有效字符。第四个是使用一个循环作为高度,其中有三个循环用于颜色。将循环计数器视为像素,您将理解为什么。
答案 1 :(得分:0)
你为什么使用printf?您应该使用i和j索引来构建和索引数组。在您的代码中,i和j变量仅用作循环计数器,而不是用作坐标。
你在做什么:
for each line
print some green
for each line
print some white
for each line
print some red
你应该做什么:
for each line
print some green
print some white
print some red
您还可以使用更有意义的变量名称,例如行而不是j和col(用于列)而不是i