Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.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 如何将.bmp图像数据保存到数组并获取每个像素的RGB值?_C - Fatal编程技术网

C 如何将.bmp图像数据保存到数组并获取每个像素的RGB值?

C 如何将.bmp图像数据保存到数组并获取每个像素的RGB值?,c,C,我正在创建一个程序,可以读取bmp图像并计算其上红色、蓝色和绿色的百分比。我搜索了很多,但不知道图像数据从哪个字节开始,以及如何获得像素的RGB值 #include<stdio.h> typedef struct { unsigned int fileSize; unsigned int offset; unsigned int reserved; char signature[2]; } BmpHeader; typedef struct { unsigned short bi

我正在创建一个程序,可以读取bmp图像并计算其上红色、蓝色和绿色的百分比。我搜索了很多,但不知道图像数据从哪个字节开始,以及如何获得像素的RGB值

#include<stdio.h>

typedef struct {
unsigned int fileSize;
unsigned int offset;
unsigned int reserved;
char signature[2];
} BmpHeader;

typedef struct {
unsigned short bitDepth;
unsigned int compressedImageSize;
unsigned int compression;
unsigned int headerSize;
unsigned int height;
unsigned int horizontalResolution;
unsigned int importantColors;
unsigned int numColors;
unsigned short planeCount;
unsigned int verticalResolution;
unsigned int width;
} BmpImageInfo;

typedef struct {
unsigned char blue;
unsigned char green;
unsigned char red;
} Rgb;

int main(void) {
 BmpHeader header;
 BmpImageInfo info;



 char filename[40];
 printf("Enter file name : ");scanf("%s", filename);
 FILE *fp;
 fp = fopen(filename, "rb");
 fread(&header, 1, sizeof(BmpHeader), fp);
 fread(&info, 1, sizeof(BmpImageInfo), fp);

 printf("%u", info.height);





 getchar();
 return 0;

}
#包括
类型定义结构{
无符号整数文件大小;
无符号整数偏移量;
无符号整数保留;
字符签名[2];
}BmpHeader;
类型定义结构{
无符号短位深度;
无符号整数压缩dimagesize;
无符号整数压缩;
无符号整数标题;
无符号整数高度;
无符号整数水平分辨率;
未签名的国际重要颜色;
无符号整数颜色;
无符号短计数;
无符号整数垂直分辨率;
无符号整数宽度;
}BmpImageInfo;
类型定义结构{
无符号字符蓝色;
无符号字符绿色;
无符号字符红色;
}Rgb;
内部主(空){
BMP装载机收割台;
BmpImageInfo;
字符文件名[40];
printf(“输入文件名:”;scanf(“%s”,文件名);
文件*fp;
fp=fopen(文件名,“rb”);
fread(&header,1,sizeof(BmpHeader),fp);
fread(&info,1,sizeof(BmpImageInfo),fp);
printf(“%u”,信息高度);
getchar();
返回0;
}

为什么我得到了错误的高度???

此链接指向描述.bmp图像格式的wiki页面。注意事项:

  • .bmp图像对所有字段都使用小端点
  • 字段之间没有空格/填充符,因此需要 视为字符数组和/或使用#pragma pack 用于描述图像的结构。 我更喜欢char数组方法
  • 有一个字段描述每个像素中的位数。 复制数据时需要这些信息。 还要注意的是,每像素24位的图像可以有第四个字段 不透明度,所以每个像素实际上是32位

  • .

    此链接指向描述.bmp图像格式的wiki页面。注意事项:

  • .bmp图像对所有字段都使用小端点
  • 字段之间没有空格/填充符,因此需要 视为字符数组和/或使用#pragma pack 用于描述图像的结构。 我更喜欢char数组方法
  • 有一个字段描述每个像素中的位数。 复制数据时需要这些信息。 还要注意的是,每像素24位的图像可以有第四个字段 不透明度,所以每个像素实际上是32位

  • .

    此链接指向描述.bmp图像格式的wiki页面。注意事项:

  • .bmp图像对所有字段都使用小端点
  • 字段之间没有空格/填充符,因此需要 视为字符数组和/或使用#pragma pack 用于描述图像的结构。 我更喜欢char数组方法
  • 有一个字段描述每个像素中的位数。 复制数据时需要这些信息。 还要注意的是,每像素24位的图像可以有第四个字段 不透明度,所以每个像素实际上是32位

  • .

    此链接指向描述.bmp图像格式的wiki页面。注意事项:

  • .bmp图像对所有字段都使用小端点
  • 字段之间没有空格/填充符,因此需要 视为字符数组和/或使用#pragma pack 用于描述图像的结构。 我更喜欢char数组方法
  • 有一个字段描述每个像素中的位数。 复制数据时需要这些信息。 还要注意的是,每像素24位的图像可以有第四个字段 不透明度,所以每个像素实际上是32位

  • ./P>考虑使用OpenCVCAN,提供C接口的链接,C接口被禁止,有利于C++接口。它的C++接口需要对C++的理解最少(我通过OpenCV学习了C++)。基本上,您只需使用

    imread
    读取图像,从文件创建Mat对象,然后使用
    at
    方法访问rgb值。有很多关于StackOverflow的帖子,有些人会认为这是这样做的一个显著的缺点。说“我可以使它工作,但不理解它是如何工作的……”,并不是一个荣誉勋章。“看,尤其是<代码> RGBQUAD< /C++ > Stutt。考虑使用OpenCVCAN,提供C接口的链接。它的C++接口需要对C++的理解最少(我通过OpenCV学习了C++)。基本上,您只需使用
    imread
    读取图像,从文件创建Mat对象,然后使用
    at
    方法访问rgb值。有很多关于StackOverflow的帖子,有些人会认为这是这样做的一个显著的缺点。说“我可以使它工作,但不理解它是如何工作的……”,并不是一个荣誉勋章。“看,尤其是<代码> RGBQUAD< /C++ > Stutt。考虑使用OpenCVCAN,提供C接口的链接。它的C++接口需要对C++的理解最少(我通过OpenCV学习了C++)。基本上,您只需使用
    imread
    读取图像,从文件创建Mat对象,然后使用
    at
    方法访问rgb值。有很多关于StackOverflow的帖子,有些人会认为这是这样做的一个显著的缺点。说“我可以使它工作,但不理解它是如何工作的……”,并不是一个荣誉勋章。“看,尤其是<代码> RGBQUAD< /C++ > Stutt。考虑使用OpenCVCAN,提供C接口的链接。它的C++接口需要对C++的理解最少(我通过OpenCV学习了C++)。基本上,您只需使用
    imread
    读取图像,从文件创建Mat对象,然后使用
    at
    方法访问rgb值。有亩