C语言中的图像黑白转换问题

C语言中的图像黑白转换问题,c,linux,bash,ubuntu,C,Linux,Bash,Ubuntu,我的a程序有问题。我一直试图用谷歌搜索这些问题,但似乎找不到我可以使用的注释。我是C语言的新手,所以我会尽我所能去学习 当我尝试使用/imgconvert.c运行它时,会出现以下错误: ./imgconvert.c: line 6: struct: command not found ./imgconvert.c: line 7: uint8_t: command not found ./imgconvert.c: line 8: syntax error near unexpected

我的a程序有问题。我一直试图用谷歌搜索这些问题,但似乎找不到我可以使用的注释。我是C语言的新手,所以我会尽我所能去学习

当我尝试使用
/imgconvert.c
运行它时,会出现以下错误:

 ./imgconvert.c: line 6: struct: command not found
 ./imgconvert.c: line 7: uint8_t: command not found
 ./imgconvert.c: line 8: syntax error near unexpected token `}'
 ./imgconvert.c: line 8: `};'
我试图用以下方法将程序编译成类似于
myProgram.o
gcc-c imgconvert.c-o myProgram.o
然后
/myProgram
。但是我得到了一个权限错误,如果我用chmod修复了这个错误,那么我会得到这个错误:

bash: ./myProgram.o: cannot execute binary file
我不知道该怎么办

代码:

#包括
#包括
#包括
#包括
结构像素{
uint8_t r,g,b,a;
};
静态uint8_t*load_图像(char*filename,int*sizex,int*sizey)
{
uint8_t*图像;
char-buf[512];
char*bufptr;
int ret;
FILE*fp=fopen(文件名,“r”);
bufptr=fgets(buf,512,fp);
ret=fscanf(fp,“%d%d\n”,sizex,sizey);
bufptr=fgets(buf,512,fp);
image=malloc(*sizex**sizey*4);
int i;
uint8_t*ptr=图像;
对于(i=0;ig+0.114*引脚->b;
如果(luma>255)
luma=255;
uint8_t intluma=(int)luma;
pout->r=intluma;
pout->g=intluma;
撅嘴->b=内卢马;
撅嘴->a=255;
}
}
int main()
{
uint8_t*inputimg,*outputimg;
int-sizex,sizey;
inputimg=load_image(“image.ppm”、&sizex、&sizey);
outputimg=malloc(sizex*sizey*4);
转换灰度(输入、输出、sizex、sizey);
保存图像(“output.ppm”、outputimg、sizex、sizey);
}

-c
传递给gcc只会将源文件编译成目标文件。在构建可执行文件时,应省略它(以及“.o”后缀)。

-c
传递给gcc只会将源文件编译成目标文件。应省略它(以及“.o”后缀)构建可执行文件时。

您有权将程序编译成可执行文件。假设它只包含一个文件(
imgconvert.c
):

然后您可以运行它:

./imgconvert

您有权将程序编译成可执行文件。假设它只包含一个文件(
imgconvert.c
):

然后您可以运行它:

./imgconvert
您当前的问题是必须编译和链接C程序。您的GCC调用使用
-C
选项,该选项告诉它只执行“编译”部分。请尝试

gcc -g -Wall imgconvert.c -o imgconvert
然后

./imgconvert
我添加了一些新选项,
-g
意味着生成调试信息,
-Wall
意味着启用默认情况下确实应该打开但没有打开的所有警告。我没有详细查看您的代码,但您很可能会得到一些“警告”:来自第一个命令的消息,您应该修复这些消息

使用
-c
选项,您得到的是一个“对象”文件(即“.o”代表的文件),该文件仅可用作后续链接操作的输入。当您开始编写大于一个文件所能容纳的程序时,您可能会需要它

顺便说一句,当您试图直接执行C源代码时出现的错误是因为,由于为向后兼容保留了古老的默认值,shell尝试执行任何无法识别为已编译可执行文件(文件开头的
\177ELF
)或正确标记的解释脚本的内容(
#!/path/to/explorer
在文件的开头)就好像它是一个shell脚本一样。

您当前的问题是必须编译和链接C程序。您的GCC调用使用
-C
选项,该选项告诉它只执行“编译”部分。请尝试

gcc -g -Wall imgconvert.c -o imgconvert
然后

./imgconvert
我添加了一些新选项,
-g
意味着生成调试信息,
-Wall
意味着启用默认情况下确实应该打开但没有打开的所有警告。我没有详细查看您的代码,但您很可能会得到一些“警告”:来自第一个命令的消息,您应该修复这些消息

使用
-c
选项,您得到的是一个“对象”文件(即“.o”代表的文件),该文件仅可用作后续链接操作的输入。当您开始编写大于一个文件所能容纳的程序时,您可能会需要它


顺便说一句,当您试图直接执行C源代码时出现的错误是因为,由于为向后兼容保留了古老的默认值,shell尝试执行任何无法识别为已编译可执行文件(文件开头的
\177ELF
)或正确标记的解释脚本的内容(
#!/path/to/explorer
位于文件开头)就像是一个shell脚本。

Grayscale!=黑白。如果你想要黑白,你想要一个二值化过滤器,它的中间值是所有>n变成1,所有n变为1,everything