XMU 数字图像处理实验3 VC MFC 读取位图BMP

本文详细介绍了使用VC++的MFC框架实现DIB位图的读取、显示、保存和格式转换。通过分析BMP文件结构,实现从文件读取位图信息,并在屏幕上正确显示不同颜色模式的位图。同时,文章提供了实验步骤和关键代码,展示如何处理数据对齐和颜色索引的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

希望大家自己做哈,当作参考,不要抄袭= =(被查出来就不好了)


实验三:编写DIB图象读/写程序

信息科学与技术学院      计算机科学与技术   2292015220xxxx xxx

一、实验名称

       编写DIB图象读/写程序

二、实验内容

       用VC++实现DIB位图(. BMP)的显示、读文件、另存文件及相互转换格式。

       实验使用的操作系统是Windows 10,使用的软件是VC6.0和VS2017。

三、算法分析

       首先了解bmp位图的数据分块及每一数据块分别表示的内容。

       BMP格式为

§  位图文件头(14字节)

§  位图信息头(40字节)

§  调色板 (可变长)

§  图像数据

       程序需要从文件读入文件头,判断文件类型是否为bmp位图,若是,则接下来需要读取信息头,根据信息头中的biBitCount判断该位图的颜色数,为2色、16色、256色和真彩色的一种,1个字节分别表示8、2、1、1/3个像素,然后根据颜色数读入调色板信息,最后再读入图像数据。

       读入后需要用OnDraw函数显示位图,针对2、16、256色位图,每次取出一个字节的信息,定义gethigh用于使用位运算取出高位的数据,定义shl为bit长度,根据取出的索引值到调色板中找出相应的颜色,输出在屏幕上(数据为从上到下,从左到右读入,但是填充颜色时从下到上,从左到右,左下角为原点)。若是真彩色图,则每次读入3个字节,每个字节分别为Blue、Green、Red的索引值。注意每一行的字节数必须为4的倍数,不足则要跳过补全的数据区,否则图像会错位。

       另存为功能写出文件时,从已读入数据依次将文件头、信息头、调色板和图像数据输出至文件即可。

四、实验步骤

       1、首先新建一个MFC工程,接着在类向导中加入消息映射-打开文件功能ID_FILE_OPEN COMMAND,加入消息映射-另存为功能ID_FILE_SAVE_AS COMMAND

       2、新建一个位图类结构体DIB,一个文件头类BMPFileHeader,一个信息头类BMPInfoHeader,一个调色板类RGBQuad,与图像数据一起构成一个位图。使用#pragma pack(i) 定义最小读取字节长度,对DIB声明两个函数Read和Write分别用于读入位图信息和写出位图信息。

       3、编写ID_FILE_OPEN函数,打开需要读取的文件之后,调用DIB的读取函数Read进行读取;编写ID_FILE_SAVE_AS函数,另存为时调用DIB的写出函数Write进行写出。

       4、在DIB中编写Read和Write函数的具体实现。对于Read,读入文件头,判断是否文件为位图,是则读取信息头,根据信息头中的biBitCount判断该位图的颜色数,为2色、16色、256色和真彩色的一种,1个字节分别表示8、2、1、1/3个像素,然后根据颜色数读入调色板信息,最后再读入图像数据。否则报错终止运行。对于Write,依次往目标文件写入文件头、信息头、调色板和图像数据。

       5、编写OnDraw函数,用于显示图像,针对2、16、256色位图,每次取出一个字节的信息,定义gethigh用于使用位运算取出高位的数据,定义shl为bit长度,根据取出的索引值到调色板中找出相应的颜色,输出在屏幕上(数据为从上到下,从左到右读入,但是填充颜色时从下到上,从左到右,左下角为原点)。针对真彩色图,则每次读入3个字节,每个字节分别为Blue、Green、Red的索引值。注意每一行的字节数必须为4的倍数,不足则要跳过补

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值