代码演示简单的BMP文件操作

本文提供了一段C语言代码,演示如何创建并保存BMP格式的24位RGB图像。关键在于理解和构造BMP文件头,确保文件头长度正确,并关闭编译器对齐优化。程序生成的图像分辨率为800×600,适用于Windows环境,未涉及比特填充。参考链接提供了BMP文件格式的详细解释。
摘要由CSDN通过智能技术生成

这里演示写出。主要难点是BMP文件头的生成。标准的BMP文件头为54个字节,可采用结构体保存。

在保存文件头时,应当把编译器的对齐优化关掉,否则BM_Header结构体的长度会变成16。

程序的基本操作是先定义BM_Header和BM_Info文件头,检查运行环境是否正确,然后打开一个文件,先写出BM_Header和BM_Info文件头,再通过一个循环逐像素地以 [B, G, R] (蓝、绿、红,小头端)的顺序写出图像信息,直到把一个图像写完。

这段代码没有考虑比特填充,所以为了便于Windows快速存取,只支持(4×M, N)的分辨率。

参考资料:BMP文件格式详解(BMP file format)
https://www.cnblogs.com/Matrix_Yao/archive/2009/12/02/1615295.html

程序在C-Free 4.0,mingw2.95编译器下编译通过。

#include <stdio.h>

typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned int uint32_t;
typedef signed char int8_t;
typedef signed short int16_t;
typedef signed int int32_t;

#pragma pack(2)    // 这行很重要,否则BM_Header的尺寸会因优化而出现错误 

#define u8 uint8_t
#define u16 uint
数字图像获取处理及实践应用源代码\ImageProcessing\cdib.cpp ................................\...............\cdib.h ................................\...............\ChildFrm.cpp ................................\...............\ChildFrm.h ................................\...............\ColorTable.h ................................\...............\Default.SUP ................................\...............\DIBPrcs.cpp ................................\...............\DibShow.cpp ................................\...............\DlgAftReg.cpp ................................\...............\DlgAftReg.h ................................\...............\DlgArith.cpp ................................\...............\DlgBitPlane.cpp ................................\...............\DlgCoding.h ................................\...............\DlgCodingHuffman.cpp ................................\...............\DlgEhnLinTrans.cpp ................................\...............\DlgEhnLinTrans.h ................................\...............\DlgEnhColor.cpp ................................\...............\DlgEnhColor.h ................................\...............\DlgHistShow.cpp ................................\...............\DlgHistShow.h ................................\...............\DlgHistShow1.cpp ................................\...............\DlgHistShow1.h ................................\...............\DlgHuffman.cpp ................................\...............\DlgMedian.cpp ................................\...............\DlgMedian.h ................................\...............\DlgRecMatch.cpp ................................\...............\DlgRecMatch.h ................................\...............\DlgReg.cpp ................................\...............\DlgReg.h ................................\...............\DlgShannon.cpp ................................\...............\DlgSmooth.cpp ................................\...............\DlgSmooth.h ................................\...............\DWT.CPP ................................\...............\Enhance.cpp ................................\...............\FreTrans.cpp ................................\...............\GlobalApi.h ................................\...............\ImageAnalysis.cpp ................................\...............\ImageCoding.cpp ................................\...............\ImageProcessing.aps ................................\...............\ImageProcessing.clw ................................\...............\ImageProcessing.cpp ................................\...............\ImageProcessing.dsp ................................\...............\ImageProcessing.dsw ................................\...............\ImageProcessing.h ................................\...............\ImageProcessing.ncb ................................\...............\ImageProcessing.opt ................................\...............\ImageProcessing.plg ................................\...............\ImageProcessing.rc ................................\...............\ImageProcessingDoc.cpp ................................\...............\ImageProcessingDoc.h ................................\...............\ImageProcessingView.cpp ................................\...............\ImageProcessingView.h ................................\...............\ImageView.cpp ................................\...............\MainFrm.cpp ................................\...............\MainFrm.h ................................\...............\Motion.cpp ................................\...............\ReadMe.txt ................................\...............\Recog.asp ................................\...............\Recog.cpp ................................\...............\res\ImageProcessing.ico ................................\...............\...\ImageProcessing.rc2 ................................\...............\...\ImageProcessingDoc.ico ................................\...............\...\Toolbar.bmp ................................\...............\resource.h ................................\...............\restore.cpp ................................\...............\SegApi.cpp ................................\...............\StdAfx.cpp ................................\...............\StdAfx.h ................................\lena.bmp ................................\ImageProcessing\Debug ................................\...............\Release ................................\...............\res ................................\ImageProcessing
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值