在Linux上使用C语言保存BMP文件可以通过以下步骤实现:
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#pragma pack(push, 1)
typedef struct {
uint16_t type; // 文件类型,固定为0x4D42
uint32_t size; // 文件大小
uint16_t reserved1; // 保留字段1,设置为0
uint16_t reserved2; // 保留字段2,设置为0
uint32_t offset; // 数据偏移量
uint32_t header_size; // 信息头大小,固定为40
int32_t width; // 图像宽度
int32_t height; // 图像高度
uint16_t planes; // 颜色平面数,固定为1
uint16_t bits_per_pixel; // 每个像素的位数
uint32_t compression; // 压缩类型,一般为0表示不压缩
uint32_t image_size; // 图像数据大小
int32_t x_resolution; // 水平分辨率,像素/米
int32_t y_resolution; // 垂直分辨率,像素/米
uint32_t colors_used; // 使用的颜色数,设置为0表示使用所有颜色
uint32_t colors_important; // 重要颜色数,设置为0表示所有颜色都重要
} BMPHeader;
#pragma pack(pop)
void saveBMP(const char* filename, uint8_t* image_data, int width, int height) {
FILE* file = fopen(filename, "wb");
if (file == NULL) {
printf("无法打开文件\n");
return;
}
// 计算图像数据大小和文件大小
int image_size = width * height * 3; // 假设每个像素有RGB三个分量,每个分量占一个字节
int file_size = sizeof(BMPHeader) + image_size;
// 填充BMP文件头
BMPHeader header;
header.type = 0x4D42;
header.size = file_size;
header.reserved1 = 0;
header.reserved2 = 0;
header.offset = sizeof(BMPHeader);
header.header_size = 40;
header.width = width;
header.height = height;
header.planes = 1;
header.bits_per_pixel = 24; // RGB三个分量,每个分量占8位
header.compression = 0;
header.image_size = image_size;
header.x_resolution = 0;
header.y_resolution = 0;
header.colors_used = 0;
header.colors_important = 0;
// 写入BMP文件头
fwrite(&header, sizeof(BMPHeader), 1, file);
// 写入图像数据
fwrite(image_data, image_size, 1, file);
fclose(file);
}
int main() {
int width = 640;
int height = 480;
uint8_t* image_data = (uint8_t*)malloc(width * height * 3); // 分配图像数据内存
// 填充图像数据,这里仅作示例,实际应根据需求生成图像数据
saveBMP("image.bmp", image_data, width, height);
free(image_data); // 释放图像数据内存
return 0;
}
以上代码将在Linux上创建一个名为"image.bmp"的BMP文件,并将图像数据保存其中。你可以根据实际需求修改图像的宽度、高度和数据填充方式。
高校公开课
Techo Day
云+社区技术沙龙[第14期]
Elastic 中国开发者大会
云+社区技术沙龙[第11期]
serverless days
Techo Day 第二期
云+社区技术沙龙 [第31期]
Techo Day
DB・洞见
云+社区技术沙龙[第5期]
领取专属 10元无门槛券
手把手带您无忧上云