不用第三方库 对图像进行读取、处理和保存
时间: 2024-01-26 14:03:40 浏览: 24
在C语言中,可以使用标准库中的文件操作函数和位操作函数来对图像进行读取、处理和保存。以下是一个简单的示例代码,可以读取一张BMP格式的图像文件,并将该图像转换为灰度图像并保存为新的文件。
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef unsigned char byte;
#pragma pack(push, 1)
typedef struct {
byte bfType[2];
int bfSize;
short bfReserved1;
short bfReserved2;
int bfOffBits;
} BMPFILEHEADER;
typedef struct {
int biSize;
int biWidth;
int biHeight;
short biPlanes;
short biBitCount;
int biCompression;
int biSizeImage;
int biXPelsPerMeter;
int biYPelsPerMeter;
int biClrUsed;
int biClrImportant;
} BMPINFOHEADER;
#pragma pack(pop)
int main() {
BMPFILEHEADER fileHeader;
BMPINFOHEADER infoHeader;
byte* imgData;
byte* grayData;
int width, height, rowSize, paddingSize, i, j, k;
FILE* fp;
// 打开文件并读取文件头和信息头
fp = fopen("example.bmp", "rb");
fread(&fileHeader, sizeof(BMPFILEHEADER), 1, fp);
fread(&infoHeader, sizeof(BMPINFOHEADER), 1, fp);
// 计算图像数据的行字节数和填充字节数
width = infoHeader.biWidth;
height = infoHeader.biHeight;
rowSize = (width * 3 + 3) & ~3;
paddingSize = rowSize - width * 3;
// 读取图像数据
imgData = (byte*)malloc(rowSize * height);
fread(imgData, rowSize * height, 1, fp);
// 关闭文件
fclose(fp);
// 将图像转换为灰度图像
grayData = (byte*)malloc(width * height);
for (i = 0, k = 0; i < height; i++) {
for (j = 0; j < width; j++, k += 3) {
grayData[i * width + j] = 0.299 * imgData[k + 2] + 0.587 * imgData[k + 1] + 0.114 * imgData[k];
}
k += paddingSize;
}
// 保存灰度图像为新的文件
fp = fopen("example_gray.bmp", "wb");
fwrite(&fileHeader, sizeof(BMPFILEHEADER), 1, fp);
fwrite(&infoHeader, sizeof(BMPINFOHEADER), 1, fp);
for (i = 0, k = 0; i < height; i++) {
for (j = 0; j < width; j++, k++) {
fwrite(&grayData[i * width + j], 1, 1, fp);
fwrite(&grayData[i * width + j], 1, 1, fp);
fwrite(&grayData[i * width + j], 1, 1, fp);
}
for (j = 0; j < paddingSize; j++) {
fwrite("\0", 1, 1, fp);
}
}
fclose(fp);
// 释放内存
free(imgData);
free(grayData);
return 0;
}
```
需要注意的是,该代码仅适用于BMP格式的图像文件,如果需要处理其他格式的图像文件,需要对代码进行相应的修改。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)