位图读取和显示
物联一班 谢鑫 0740123
1. 试验目标
经过位图文件解析,深入了解位图文件格式;熟悉Windows环境下图片显示方法。
2. 试验内容
在Windows环境下,经过解析位图文件格式,读入位图并进行显示,不能使用Windows中已经有API(如LoadImage函数)读取位图文件,即自己实现LoadImage函数功效:
LoadImage(NULL, “”, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE)
三、试验原理及步骤:
基础知识:BMP位图文件格式
BMP位图文件中关键由4部分内容组成:
文件头BITMAPFILEHEADER为一STRUCTURE:
typedef struct tagBITMAPFILEHEADER {
WORD bfType;//文件类型,必需为“BM”或0x424d
DWORD bfSize;//文件大小
WORD bfReserved1;//保留
WORD bfReserved2;//保留
DWORD bfOffBits;//从文件头到实际位图数据偏移字节数
} BITMAPFILEHEADER, FAR *LPBITMAPFILEHEADER, *PBITMAPFILEHEADER;
位图信息头BITMAPINFOHEADER,定义以下:
typedef struct tagBITMAPINFOHEADER{
DWORD biSize;//structure size
LONG biWidth;//image width
LONG biHeight;//image height
WORD biPlanes;//value is 1
WORD biBitCount;//color bits
DWORD biCompression;//compression or not
DWORD biSizeImage;//Image size=width*height( 其中width必需为4倍数。
LONG biXPelsPerMeter;//
LONG biYPelsPerMeter;
DWORD biClrUsed;//
DWORD biClrImportant;
} BITMAPINFOHEADER, FAR *LPBITMAPINFOHEADER, *PBITMAPINFOHEADER;
调色板
typedef struct tagRGBQUAD {
BYTE rgbBlue;
BYTE rgbGreen;
BYTE rgbRed;
BYTE rgbReserved;
} RGBQUAD;用于存放图像颜色。
图像实际数据。对于2色图,用1位表示像素值。对于16色图,用4位表示像素值。对于256色图,一个字节刚好表示1个像素。对于用到调色板位图,图像数据就是该像素颜色在调色板中索引值,对于真彩色,不用调色板,三个字节数据分别代表图像B、G、R。
试验步骤:
生成一名为Gsm基于MFC应用程序框架:选择file菜单new选项,在打开窗口中选择project选项,选中MFC AppWizard(exe)。并在project name输入Gsm ,选择存放project位置。以下图所表示。
选择确定,进入下一步。选择single document,并在最终CdipView类基类中选择CscrollView,使应用程序视图含有滚动条。
在应用程序中加入具体函数和变量。
在Class View中选择CGsmView单击右键选择添加组员变量,加入下列变量:
public:
int m_x;
HBITMAP m_Bmp;
LPVOID m_ColorList;
LPBYTE m_Image;
LPBITMAPINFOHEADER m_DibHead;
enum allocate {None, crtallocate, heapallocate};
allocate m_nBmpallocate;
allocate m_
计算机图形图像实验一样稿 来自淘豆网m.daumloan.com转载请标明出处.