用vc打开一幅位图,图像扫描顺序

来源:百度知道 编辑:UC知道 时间:2024/05/16 01:34:48
用vc打开bmp位图,他读入内存的顺序是怎样的呢?
比如图像以矩阵形式表示,是从矩阵中那一个点以怎么样的顺序扫描的?
是一种什么坐标

应该是线性寻址方式,行为主序,先将第一行数据读入,然后读第二行……。实际应用中,位图文件里边包含许多信息,当然最重要的是像素数据。以鄙人之见,你完全没有必要把位图的头信息、像素信息等挨个读出来,你可以使用现成的API函数,举个例子:
//////////////////////////////////////////////////
HBITMAP hbmp = NULL;
BITMAP bitmap;

hbmp = (HBITMAP)LoadImage(NULL, "test.bmp",
IMAGE_BITMAP, width, height, LR_LOADFROMFILE | LR_CREATEDIBSECTION );
GetObject(hbmp, sizeof(BITMAP), &bitmap);

unsigned char *px = NULL;
px = new unsigned char[bitmap.bmHeight*bitmap.bmWidthBytes];

GetBitmapBits(hbmp, bitmap.bmHeight * bitmap.bmWidthBytes, px);
//////////////////////////////////////////////
注意:"test.bmp"是你要读入的位图,width和height是该位图的宽度和高度,单位都是像素数,也就是正整数,你可以在Windows下轻易地知道你要读的位图的宽度和高度以及位数,一般都是24位的。
以上程序,将"test.bmp"这个位图文件各个属性(比如宽度、高度、像素位……等)存入结构bitmap中,将各个像素值存入到unsigned char 类型的指针 px 所指向的一片线性存储区里(实际上是一个一维数组),以后就可以通过像素操作,将px里的像素值读入到屏幕上,通过显卡驱动画出来。

再友情提醒一点,个人认为非常重要,就是某些显卡可能不支持24位显存寻址,对于系统内存也可能有类似情况。所以,你