请用c语言写一个把八位深的灰度bmp图片保存到二维数组中的函数
时间: 2024-05-14 14:16:55 浏览: 112
好的,以下是用 C 语言编写的将 8 位深的灰度 BMP 图片保存到二维数组中的函数代码:
```
void bmpToArray(char* bmpPath, int rows, int cols, unsigned char arr[][cols])
{
FILE* fp = fopen(bmpPath, "rb");
if (!fp) {
printf("Could not open file %s.\n", bmpPath);
exit(1);
}
// read BMP header
unsigned char header[54];
fread(header, sizeof(unsigned char), 54, fp);
// get BMP image width/height
int bmpWidth = *(int*)&header[18];
int bmpHeight = *(int*)&header[22];
// check if dimensions match array
if (bmpWidth != cols || bmpHeight != rows) {
printf("Image dimensions do not match array size.\n");
exit(1);
}
// read image data into array
unsigned char imgData[bmpWidth*bmpHeight];
fread(imgData, sizeof(unsigned char), bmpWidth*bmpHeight, fp);
// copy image data to array
for (int r = 0; r < rows; r++) {
for (int c = 0; c < cols; c++) {
arr[r][c] = imgData[(bmpHeight - r - 1)*bmpWidth + c];
}
}
fclose(fp);
}
```
此函数接收 BMP 图片的路径,数组的行数和列数,以及一个指向二维数组的指针。它首先打开传递的 BMP 文件,读取其头信息获取图像的宽度和高度,并检查它们是否与指定的数组大小匹配。接下来,它将图像数据读入一个临时数组中,然后将其复制到指定的二维数组中。最后,它关闭文件并返回。
阅读全文