Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.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
将灰度转换为ascii并将其写入.txt文件_C_Ascii - Fatal编程技术网

将灰度转换为ascii并将其写入.txt文件

将灰度转换为ascii并将其写入.txt文件,c,ascii,C,Ascii,这是我的密码。lenaArray.h是一个灰度文件。我遇到的问题是,它不会写入文件,我也不会得到任何错误 include stdio.h include stdlib.h include stdint.h include "lenaArray.h" // Average grayscale big int avgGrayScale(int *lena){ int sum = 0; for (int x = 0; x < 512; x++){ for (i

这是我的密码。lenaArray.h是一个灰度文件。我遇到的问题是,它不会写入文件,我也不会得到任何错误

include stdio.h

include stdlib.h

include stdint.h

include "lenaArray.h" 


// Average grayscale big

int avgGrayScale(int *lena){

   int sum = 0;

   for (int x = 0; x < 512; x++){

  for (int y = 0; y< 512 ; y++){

     sum += lena[y * 512 + x]; 

  }



}

   return sum / (512 * 512);

}

// Average grayscale small

int avgGrayScaleSmall(int *lena){

   int sum = 0;

   for (int x = 100; x < 400; x++){

      for (int y = 100; y< 400 ; y++){

         sum += lena[y * 400 + x]; 

      }

   }

   return sum / (300 * 300);

}

// Ascii character

char characterGrayScale(int grayScale) {

    if (grayScale < 25) return '@';
    if (grayScale < 50) return '%';
    if (grayScale < 75) return '#';
    if (grayScale < 100) return '*';
    if (grayScale < 125) return '+';
    if (grayScale < 150) return '=';
    if (grayScale < 175) return '-';
    if (grayScale < 200) return ':';
    if (grayScale < 225) return '.';
    return ' ';
}


int main (void) {

// print average grayscale big picture

int averageBigLena = avgGrayScale(&lena);

  printf("Average grayscale big image: %d\n", averageBigLena);

// print average grayscale small picture

int averageSmallLena = avgGrayScaleSmall(&lena);

  printf("Average grayscale small image: %d\n", averageSmallLena);

  // Print lena in ascii to a file

    FILE *lenaAsciiBig;

    lenaAsciiBig = fopen("lena_ascii_big.txt", "w");

    for (int x = 0; x < 512; x++) {

        for (int y = 0; y < 512; y++) {

            char c = characterGrayScale(lena[y * 512 + x]);

            fwrite(&c, 1, 1, lenaAsciiBig);

        }

        char c = '\n';

        fwrite(&c, 1, 1, lenaAsciiBig);

    }

    fclose(lenaAsciiBig);

    return 0;
}
包括stdio.h
包括stdlib.h
包括stdint.h
包括“lenaArray.h”
//平均灰度大
int avgGrayScale(int*lena){
整数和=0;
对于(int x=0;x<512;x++){
对于(int y=0;y<512;y++){
sum+=lena[y*512+x];
}
}
返回和/(512*512);
}
//平均灰度小
int avgGrayScaleSmall(int*lena){
整数和=0;
对于(int x=100;x<400;x++){
对于(int y=100;y<400;y++){
总和+=lena[y*400+x];
}
}
回报总额/(300*300);
}
//Ascii字符
字符灰度(整数灰度){
如果(灰度<25)返回“@”;
如果(灰度<50)返回“%”;
如果(灰度<75)返回“#”;
如果(灰度<100)返回“*”;
如果(灰度<125)返回“+”;
如果(灰度<150)返回“=”;
如果(灰度<175)返回“-”;
如果(灰度<200)返回“:”;
如果(灰度<225)返回“.”;
返回“”;
}
内部主(空){
//打印平均灰度大图片
int averageBigLena=avgGrayScale(&lena);
printf(“平均灰度大图像:%d\n”,averageBigLena);
//打印平均灰度小图片
int averageSmallLena=avgGrayScaleSmall(&lena);
printf(“平均灰度小图像:%d\n”,平均灰度小图像:%a);
//将ascii格式的lena打印到文件中
文件*Lenaassibig;
Lenaassibig=fopen(“lena_ascii_big.txt”,“w”);
对于(int x=0;x<512;x++){
对于(int y=0;y<512;y++){
字符c=字符灰度(lena[y*512+x]);
fwrite(和c,1,1,Lenaassibig);
}
字符c='\n';
fwrite(和c,1,1,Lenaassibig);
}
fclose(LenaasciBig);
返回0;
}

我对代码进行了两次修改。首先,我用简单空数组的定义替换了
#include“lenaArray.h”
。然后我更改了调用
avgGrayScale(&lena)带有
平均光线比例(lena)并对小版本进行了调整。最后,由于我的空lena数组,我收到一个256行256@的文本文件

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

//include "lenaArray.h"
int lena[512*512]; //Dirty HACK, becaus I dont have lena data

// Average grayscale big

int avgGrayScale(int *lena)
{
    int sum = 0;
    for (int x = 0; x < 512; x++)
    {
        for (int y = 0; y< 512 ; y++)
        {
            sum += lena[y * 512 + x];
        }
    }
    return sum / (512 * 512);
}

// Average grayscale small

int avgGrayScaleSmall(int *lena)
{
    int sum = 0;
    for (int x = 100; x < 400; x++)
    {
        for (int y = 100; y< 400 ; y++)
        {
            sum += lena[y * 400 + x];
        }
    }
    return sum / (300 * 300);
}

// Ascii character

char characterGrayScale(int grayScale)
{
    if (grayScale < 25) return '@';
    if (grayScale < 50) return '%';
    if (grayScale < 75) return '#';
    if (grayScale < 100) return '*';
    if (grayScale < 125) return '+';
    if (grayScale < 150) return '=';
    if (grayScale < 175) return '-';
    if (grayScale < 200) return ':';
    if (grayScale < 225) return '.';
    return ' ';
}


int main (void)
{
// print average grayscale big picture

    int averageBigLena = avgGrayScale(lena); 
    printf("Average grayscale big image: %d\n", averageBigLena);

// print average grayscale small picture
    int averageSmallLena = avgGrayScaleSmall(lena);
    printf("Average grayscale small image: %d\n", averageSmallLena);

    // Print lena in ascii to a file

    FILE *lenaAsciiBig;

    lenaAsciiBig = fopen("lena_ascii_big.txt", "w");

    for (int x = 0; x < 512; x++)
    {
        for (int y = 0; y < 512; y++)
        {
            char c = characterGrayScale(lena[y * 512 + x]);
            fwrite(&c, 1, 1, lenaAsciiBig);
        }
        char c = '\n';
        fwrite(&c, 1, 1, lenaAsciiBig);
    }
    fclose(lenaAsciiBig);
    return 0;
}

我对代码进行了两次修改。首先,我用简单空数组的定义替换了
#include“lenaArray.h”
。然后我更改了调用
avgGrayScale(&lena)带有
平均光线比例(lena)并对小版本进行了调整。最后,由于我的空lena数组,我收到一个256行256@的文本文件

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

//include "lenaArray.h"
int lena[512*512]; //Dirty HACK, becaus I dont have lena data

// Average grayscale big

int avgGrayScale(int *lena)
{
    int sum = 0;
    for (int x = 0; x < 512; x++)
    {
        for (int y = 0; y< 512 ; y++)
        {
            sum += lena[y * 512 + x];
        }
    }
    return sum / (512 * 512);
}

// Average grayscale small

int avgGrayScaleSmall(int *lena)
{
    int sum = 0;
    for (int x = 100; x < 400; x++)
    {
        for (int y = 100; y< 400 ; y++)
        {
            sum += lena[y * 400 + x];
        }
    }
    return sum / (300 * 300);
}

// Ascii character

char characterGrayScale(int grayScale)
{
    if (grayScale < 25) return '@';
    if (grayScale < 50) return '%';
    if (grayScale < 75) return '#';
    if (grayScale < 100) return '*';
    if (grayScale < 125) return '+';
    if (grayScale < 150) return '=';
    if (grayScale < 175) return '-';
    if (grayScale < 200) return ':';
    if (grayScale < 225) return '.';
    return ' ';
}


int main (void)
{
// print average grayscale big picture

    int averageBigLena = avgGrayScale(lena); 
    printf("Average grayscale big image: %d\n", averageBigLena);

// print average grayscale small picture
    int averageSmallLena = avgGrayScaleSmall(lena);
    printf("Average grayscale small image: %d\n", averageSmallLena);

    // Print lena in ascii to a file

    FILE *lenaAsciiBig;

    lenaAsciiBig = fopen("lena_ascii_big.txt", "w");

    for (int x = 0; x < 512; x++)
    {
        for (int y = 0; y < 512; y++)
        {
            char c = characterGrayScale(lena[y * 512 + x]);
            fwrite(&c, 1, 1, lenaAsciiBig);
        }
        char c = '\n';
        fwrite(&c, 1, 1, lenaAsciiBig);
    }
    fclose(lenaAsciiBig);
    return 0;
}

编译发布的代码会导致:

gcc    -ggdb -Wall -Wextra -Wconversion -pedantic -std=gnu11  -c "untitled.c"  (in directory: /home/richard/Documents/forum)
untitled.c:1:1: error: unknown type name ‘include’
 include stdio.h
 ^~~~~~~
untitled.c:1:14: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘.’ token
 include stdio.h
              ^
untitled.c: In function ‘main’:
untitled.c:73:22: warning: implicit declaration of function ‘avgGrayScale’; did you mean ‘avgGrayScaleSmall’? [-Wimplicit-function-declaration]
 int averageBigLena = avgGrayScale(&lena);
                      ^~~~~~~~~~~~
                      avgGrayScaleSmall
untitled.c:73:36: error: ‘lena’ undeclared (first use in this function)
 int averageBigLena = avgGrayScale(&lena);
                                    ^~~~
untitled.c:73:36: note: each undeclared identifier is reported only once for each function it appears in
untitled.c:75:3: warning: implicit declaration of function ‘printf’ [-Wimplicit-function-declaration]
   printf("Average grayscale big image: %d\n", averageBigLena);
   ^~~~~~
untitled.c:75:3: warning: incompatible implicit declaration of built-in function ‘printf’
untitled.c:75:3: note: include ‘<stdio.h>’ or provide a declaration of ‘printf’
untitled.c:85:5: error: unknown type name ‘FILE’
     FILE *lenaAsciiBig;
     ^~~~
untitled.c:87:20: warning: implicit declaration of function ‘fopen’ [-Wimplicit-function-declaration]
     lenaAsciiBig = fopen("lena_ascii_big.txt", "w");
                    ^~~~~
untitled.c:87:18: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
     lenaAsciiBig = fopen("lena_ascii_big.txt", "w");
                  ^
untitled.c:95:13: warning: implicit declaration of function ‘fwrite’ [-Wimplicit-function-declaration]
             fwrite(&c, 1, 1, lenaAsciiBig);
             ^~~~~~
untitled.c:95:13: warning: incompatible implicit declaration of built-in function ‘fwrite’
untitled.c:95:13: note: include ‘<stdio.h>’ or provide a declaration of ‘fwrite’
untitled.c:101:9: warning: incompatible implicit declaration of built-in function ‘fwrite’
         fwrite(&c, 1, 1, lenaAsciiBig);
         ^~~~~~
untitled.c:101:9: note: include ‘<stdio.h>’ or provide a declaration of ‘fwrite’
untitled.c:105:5: warning: implicit declaration of function ‘fclose’ [-Wimplicit-function-declaration]
     fclose(lenaAsciiBig);
     ^~~~~~
Compilation failed.

注意:为避免代码格式问题,在插入问题时,将每行代码缩进4个空格。

编译发布的代码将导致:

gcc    -ggdb -Wall -Wextra -Wconversion -pedantic -std=gnu11  -c "untitled.c"  (in directory: /home/richard/Documents/forum)
untitled.c:1:1: error: unknown type name ‘include’
 include stdio.h
 ^~~~~~~
untitled.c:1:14: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘.’ token
 include stdio.h
              ^
untitled.c: In function ‘main’:
untitled.c:73:22: warning: implicit declaration of function ‘avgGrayScale’; did you mean ‘avgGrayScaleSmall’? [-Wimplicit-function-declaration]
 int averageBigLena = avgGrayScale(&lena);
                      ^~~~~~~~~~~~
                      avgGrayScaleSmall
untitled.c:73:36: error: ‘lena’ undeclared (first use in this function)
 int averageBigLena = avgGrayScale(&lena);
                                    ^~~~
untitled.c:73:36: note: each undeclared identifier is reported only once for each function it appears in
untitled.c:75:3: warning: implicit declaration of function ‘printf’ [-Wimplicit-function-declaration]
   printf("Average grayscale big image: %d\n", averageBigLena);
   ^~~~~~
untitled.c:75:3: warning: incompatible implicit declaration of built-in function ‘printf’
untitled.c:75:3: note: include ‘<stdio.h>’ or provide a declaration of ‘printf’
untitled.c:85:5: error: unknown type name ‘FILE’
     FILE *lenaAsciiBig;
     ^~~~
untitled.c:87:20: warning: implicit declaration of function ‘fopen’ [-Wimplicit-function-declaration]
     lenaAsciiBig = fopen("lena_ascii_big.txt", "w");
                    ^~~~~
untitled.c:87:18: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
     lenaAsciiBig = fopen("lena_ascii_big.txt", "w");
                  ^
untitled.c:95:13: warning: implicit declaration of function ‘fwrite’ [-Wimplicit-function-declaration]
             fwrite(&c, 1, 1, lenaAsciiBig);
             ^~~~~~
untitled.c:95:13: warning: incompatible implicit declaration of built-in function ‘fwrite’
untitled.c:95:13: note: include ‘<stdio.h>’ or provide a declaration of ‘fwrite’
untitled.c:101:9: warning: incompatible implicit declaration of built-in function ‘fwrite’
         fwrite(&c, 1, 1, lenaAsciiBig);
         ^~~~~~
untitled.c:101:9: note: include ‘<stdio.h>’ or provide a declaration of ‘fwrite’
untitled.c:105:5: warning: implicit declaration of function ‘fclose’ [-Wimplicit-function-declaration]
     fclose(lenaAsciiBig);
     ^~~~~~
Compilation failed.

注意:为避免代码格式问题,在插入问题时,将每行代码缩进4个空格。

如果程序没有出现任何错误,则可能是文件编写时搜索的位置错误;我们无法真正帮助您,除非您提供您阅读的
.h
文件,以便我们能够重新还原如何添加文件?OT:为了便于阅读和理解:1)请始终缩进代码。在每个左大括号“{”之后缩进。在每个右大括号“}”之前取消缩进。建议每个缩进级别为4个空格。2) 不要随意加入一堆空行。相当独立的代码块:
if
else
for
while
通过单个空行切换
案例
。3) 用2或3个空行分隔函数(保持一致)发布的代码不会编译!请更正此问题。如果程序未出现任何错误,则可能是文件已写入,但您在错误的位置进行了搜索;我们无法真正帮助您,除非您提供您阅读的
.h
文件,以便我们能够重新还原如何添加文件?OT:为了便于阅读和理解:1)请始终缩进代码。在每个左大括号“{”之后缩进。在每个右大括号“}”之前取消缩进。建议每个缩进级别为4个空格。2) 不要随意加入一堆空行。相当独立的代码块:
if
else
for
while
通过单个空行切换
案例
。3) 用2或3个空行分隔函数(保持一致)发布的代码不会编译!请更正此问题。文件中仍然没有打印任何内容。lena的类型是什么?程序是否在没有写访问权限的情况下将输出文件放到文件夹中?你看到屏幕上打印的平均值了吗?似乎有文件访问问题。可能fopen()返回0。将lenaAsciiBig的值转储到屏幕上。文件中仍然没有打印任何内容
lena
的类型是什么?程序是否在没有写访问权限的情况下将输出文件放到文件夹中?你看到屏幕上打印的平均值了吗?似乎有文件访问问题。可能fopen()返回0。在屏幕上转储Lenaassibig的值。