C语言bmp文件隐藏,怪事!!关于读bmp文件!

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

#include "stdio.h"

typedef struct

{

char buf[28];

int biBitCount;

}InfoHeader;

void main(void)

{

FILE *fp;

InfoHeader header;

fp=fopen("e:\leaf.bmp","rb");

if(!fp)

{

printf("Open error!");

getch();

}

else

{

fread(&header,sizeof(InfoHeader),1,fp);

printf("biBitCount:   %d",header.biBitCount);

getch();

}

}

BMP位图信息头数据用于说明位图的尺寸等信息.

typedef struct tagBITMAPINFOHEADER{

DWORD  biSize;         // 本结构所占用字节数

LONG   biWidth;        // 位图的宽度,以像素为单位

LONG   biHeight;       // 位图的高度,以像素为单位

WORD   biPlanes;       // 目标设备的级别,必须为1

WORD   biBitCount;     // 每个像素所需的位数,必须是1(双色),4(16色),8(256

色)或24(真彩色)之一

DWORD  biCompression;  // 位图压缩类型,必须是 0(不压缩),1(BI_RLE8压缩类型

)或2(BI_RLE4压缩类型)之一

DWORD  biSizeImage;    // 位图的大小,以字节为单位

LONG   biXPelsPerMeter;// 位图水平分辨率,每米像素数

LONG   biYPelsPerMeter;// 位图垂直分辨率,每米像素数

DWORD  biClrUsed;      // 位图实际使用的颜色表中的颜色数

DWORD  biClrImportant; // 位图显示过程中重要的颜色数

} BITMAPINFOHEADER;

本程序想得到:位图实际使用的颜色表中的颜色数。

可是我得到的结果是32

怪了!!

求教了!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在C语言中获取BMP文件,可以使用以下步骤: 1. 打开BMP文件文件信息文件信息应该包括BMP文件的大小、宽度、高度和像素位数等信息。 2. BMP文件的像素数据。BMP文件中的像素数据存储在文件信息之后。要取像素数据,需要使用fread函数从文件取数据。 3. 将取的像素数据存储在内存中。可以使用动态分配内存的方法将像素数据存储在内存中。 4. 使用取的像素数据进行图像处理、分析或显示等操作。 以下是一个简单的C语言程序,可以用于获取BMP文件并显示图像: ```c #include <stdio.h> #include <stdlib.h> #pragma pack(2) typedef struct BMPHeader { uint16_t type; // 文件类型,必须是0x4d42 uint32_t size; // 文件大小,包括头文件和像素数据 uint16_t reserved1; // 保留,必须是0 uint16_t reserved2; // 保留,必须是0 uint32_t offset; // 像素数据的偏移量 uint32_t dib_header_size; // DIB头文件大小 int32_t width; // 图像的宽度 int32_t height; // 图像的高度 uint16_t planes; // 平面数,必须是1 uint16_t bits_per_pixel; // 像素位数,可以是1、4、8、16、24、32 uint32_t compression; // 压缩类型 uint32_t image_size; // 图像大小,包括未使用的像素数据 int32_t x_pixels_per_meter; // 水平分辨率 int32_t y_pixels_per_meter; // 垂直分辨率 uint32_t colors_used; // 使用的颜色数 uint32_t colors_important; // 重要的颜色数 } BMPHeader; void show_image(uint8_t* data, int32_t width, int32_t height) { // 在这里可以使用自己的图像处理函数来处理图像 // 这里简单地打印出图像的像素值 for (int32_t y = 0; y < height; y++) { for (int32_t x = 0; x < width; x++) { printf("%d ", data[y * width + x]); } printf("\n"); } } int main(int argc, char** argv) { if (argc < 2) { printf("Usage: %s <bmp_file>\n", argv[0]); return 0; } FILE* f = fopen(argv[1], "rb"); if (!f) { printf("Failed to open file %s\n", argv[1]); return 0; } BMPHeader header; fread(&header, sizeof(header), 1, f); if (header.type != 0x4d42) { printf("File %s is not a BMP file\n", argv[1]); fclose(f); return 0; } if (header.bits_per_pixel != 8) { printf("File %s is not a grayscale BMP file\n", argv[1]); fclose(f); return 0; } uint8_t* data = (uint8_t*)malloc(header.width * header.height); fseek(f, header.offset, SEEK_SET); fread(data, 1, header.width * header.height, f); fclose(f); show_image(data, header.width, header.height); free(data); return 0; } ``` 这个程序可以取一个灰度图像的BMP文件,并将像素值打印到控制台上。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值