Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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 fread导致数组无法读取_C_Arrays_Fread - Fatal编程技术网

C fread导致数组无法读取

C fread导致数组无法读取,c,arrays,fread,C,Arrays,Fread,我正在尝试为bmp图像编程一种边缘检测方法,但在使用fread读取数据后,我无法访问保存像素RGB值的数组 图像从fread读取到的数组中很好地写出,自然不变,所以我真的不确定这里发生了什么。我怀疑这与我分配阵列的方式有关,但我不确定需要更改什么。非常感谢您的帮助 struct fileHeader{ unsigned short type; unsigned int size; unsigned short reservedOne, reservedTwo; u

我正在尝试为bmp图像编程一种边缘检测方法,但在使用fread读取数据后,我无法访问保存像素RGB值的数组

图像从fread读取到的数组中很好地写出,自然不变,所以我真的不确定这里发生了什么。我怀疑这与我分配阵列的方式有关,但我不确定需要更改什么。非常感谢您的帮助

struct fileHeader{
    unsigned short type;
    unsigned int size;
    unsigned short reservedOne, reservedTwo;
    unsigned int offset;
}Header;

struct infofileHeader{
    unsigned int size;
    int width, height;
    unsigned short planes;
    unsigned short bits;
    unsigned int compression;
    unsigned int imageSize;
    int xResolution, yResolution;
    unsigned int colors;
    unsigned int importantColors;
} infoHeader;

struct pixel{
    unsigned char Red, Green, Blue;
};

int main(int argc, char *argv[])
{
    int i;
    FILE* image = fopen(argv[1], "rb");
    FILE *testFile = fopen("out.bmp", "wb");

    fread(&Header.type, 2, 1, image);
    fread(&Header.size, 4, 1, image);
    fread(&Header.reservedOne, 2, 1, image);
    fread(&Header.reservedTwo, 2, 1, image);
    fread(&Header.offset, 4, 1, image);

    fread(&infoHeader.size, 4, 1, image);
    fread(&infoHeader.width, 4, 1, image);
    fread(&infoHeader.height, 4, 1, image);
    fread(&infoHeader.planes, 2, 1, image);
    fread(&infoHeader.bits, 2, 1, image);
    fread(&infoHeader.compression, 4, 1, image);
    fread(&infoHeader.imageSize, 4, 1, image);
    fread(&infoHeader.xResolution, 4, 1, image);
    fread(&infoHeader.yResolution, 4, 1, image);
    fread(&infoHeader.colors, 4, 1, image);
    fread(&infoHeader.importantColors, 4, 1, image);

    printf("%X\n", Header.type);
    printf("%d\n", Header.size);
    printf("%d\n", Header.offset);

    printf("Horizontal Resolution: %d\n", infoHeader.width);
    printf("Vertical Resolution: %d\n", infoHeader.height);
    printf("Total Resolution:Test %d\n", infoHeader.width * infoHeader.height);


    struct pixel **pixelArray = malloc(infoHeader.height * sizeof(pixelArray));
        if(pixelArray == NULL)printf("Could not allocate memory");

    for(i=0; i<infoHeader.height; i++){
        pixelArray[i] = (struct pixel*) malloc(infoHeader.width * sizeof(struct pixel));
            if(pixelArray[i] == NULL)printf("Could not allocate memory");
    }


    fread(pixelArray, sizeof(struct pixel), infoHeader.width*infoHeader.height, image);

    fclose(image);

    fwrite(&Header.type, 2, 1, testFile);
    fwrite(&Header.size, 4, 1, testFile);
    fwrite(&Header.reservedOne, 2, 1, testFile);
    fwrite(&Header.reservedTwo, 2, 1, testFile);
    fwrite(&Header.offset, 4, 1, testFile);

    fwrite(&infoHeader.size, 4, 1, testFile);
    fwrite(&infoHeader.width, 4, 1, testFile);
    fwrite(&infoHeader.height, 4, 1, testFile);
    fwrite(&infoHeader.planes, 2, 1, testFile);
    fwrite(&infoHeader.bits, 2, 1, testFile);
    fwrite(&infoHeader.compression, 4, 1, testFile);
    fwrite(&infoHeader.imageSize, 4, 1, testFile);
    fwrite(&infoHeader.xResolution, 4, 1, testFile);
    fwrite(&infoHeader.yResolution, 4, 1, testFile);
    fwrite(&infoHeader.colors, 4, 1, testFile);
    fwrite(&infoHeader.importantColors, 4, 1, testFile);

    fwrite(pixelArray, sizeof(struct pixel), 50000, testFile);

    /*for(i=0; i<infoHeader.height; i++){
        free(pixelArray[i]);
    }
    free(pixelArray);*/

    fclose(testFile);

    return 0;
}
struct文件头{
无符号短型;
无符号整数大小;
未签名的短预留完成,预留两个;
无符号整数偏移量;
}收割台;
结构infofileHeader{
无符号整数大小;
int宽度、高度;
无符号短平面;
无符号短位;
无符号整数压缩;
无符号整数图像大小;
int x分辨率,y分辨率;
无符号整数颜色;
未签名的国际重要颜色;
}信息头;
结构像素{
无符号字符红色、绿色、蓝色;
};
int main(int argc,char*argv[])
{
int i;
文件*image=fopen(argv[1],“rb”);
FILE*testFile=fopen(“out.bmp”、“wb”);
fread(&Header.type,2,1,image);
fread(&Header.size,4,1,图像);
fread(&Header.reservedOne,2,1,图像);
fread(&Header.reservedTwo,2,1,image);
fread(&Header.offset,4,1,图像);
fread(&infoHeader.size,4,1,图像);
fread(&infoHeader.width,4,1,图像);
fread(&infoHeader.height,4,1,图像);
fread(&infoHeader.planes,2,1,图像);
fread(&infoHeader.bits,2,1,image);
fread(&infoHeader.compression,4,1,image);
fread(&infoHeader.imageSize,4,1,image);
fread(&infoHeader.x分辨率,4,1,图像);
fread(&infoHeader.yResolution,4,1,图像);
fread(&infoHeader.colors,4,1,图像);
fread(&infoHeader.importantColors,4,1,image);
printf(“%X\n”,Header.type);
printf(“%d\n”,Header.size);
printf(“%d\n”,Header.offset);
printf(“水平分辨率:%d\n”,infoHeader.width);
printf(“垂直分辨率:%d\n”,infoHeader.height);
printf(“总分辨率:测试%d\n”,infoHeader.width*infoHeader.height);
结构像素**pixelArray=malloc(infoHeader.height*sizeof(pixelArray));
如果(pixelArray==NULL)printf(“无法分配内存”);
对于(i=0;i
您不能以这种方式读取像素,因为您对每行进行了不同的分配

相反,您必须为每一行单独调用
fread

您不能以这种方式读取像素,因为您对每行进行了不同的分配

相反,您必须为每一行单独调用
fread

您不能以这种方式读取像素,因为您对每行进行了不同的分配

相反,您必须为每一行单独调用
fread

您不能以这种方式读取像素,因为您对每行进行了不同的分配


相反,你必须为每一行单独调用
fread

你能澄清“无法访问数组”的意思吗?建议检查
fread(像素数组,
的返回值,并与
infoHeader.width*infoHeader.height
进行比较。BMP有多种格式。你能澄清一下你的意思吗“无法访问数组”?建议检查
fread(pixelArray,
的返回值,并与
infoHeader.width*infoHeader.height
进行比较。BMP有多种格式。您能否澄清“无法访问数组”的含义?建议检查
fread的返回值(pixelArray,
并与
infoHeader.width*infoHeader.height
进行比较。BMP有多种格式。请澄清“无法访问数组”的含义。建议检查
fread(pixelArray,
的返回值,并与
infoHeader.width*infoHeader.height
进行比较。BMP有多种格式。
...
fread(pixelArray, sizeof(struct pixel), infoHeader.width*infoHeader.height, image);
...