易码技术论坛

 找回密码
 加入易码
搜索
查看: 235767|回复: 3

[求助]如何在VC里读取一幅图片的数据

[复制链接]
发表于 2006-11-28 22:00:51 | 显示全部楼层
这个BMP嘛~~首先是一个BMP文件头
  1. typedef struct tagBITMAPFILEHEADER {
  2.   WORD   bfType;
  3.   DWORD  bfSize;
  4.   WORD   bfReserved1;
  5.   WORD   bfReserved2;
  6.   DWORD  bfOffBits;
  7. } BITMAPFILEHEADER, *PBITMAPFILEHEADER;
复制代码
然后是一个BMP信息头~
  1. typedef struct tagBITMAPINFOHEADER{
  2.   DWORD  biSize;
  3.   LONG  biWidth;
  4.   LONG  biHeight;
  5.   WORD  biPlanes;
  6.   WORD  biBitCount;
  7.   DWORD  biCompression;
  8.   DWORD  biSizeImage;
  9.   LONG  biXPelsPerMeter;
  10.   LONG  biYPelsPerMeter;
  11.   DWORD  biClrUsed;
  12.   DWORD  biClrImportant;
  13. } BITMAPINFOHEADER, *PBITMAPINFOHEADER;
复制代码
如果BMP信息头里面的biBitCount <= 8的话,说明这个BMP用的是索引色,那么紧接着的就是BMP的调色板,这是个数组,大小等于2^biBitCount
  1. RGBQUAD       bmiColors[];
复制代码
如果不是索引色就没有这个调色板了。
在接下来就是BMP的图像数据了~

至于读取,有了上面的结构之后当然可以自己写函数来读了,如果懒得写可以使用WIN32API来读取
  1. The LoadBitmap function loads the specified bitmap resource from a module&#39;s executable file. This function has been superseded by the LoadImage function.
  2. HBITMAP LoadBitmap(
  3.   HINSTANCE hInstance,  // handle to application instance
  4.   LPCTSTR lpBitmapName  // name of bitmap resource
  5. );
复制代码
其中的
HBITMAP 返回值是一个位图句柄,读取成功后就可以用这个句柄来YY你的图像了
hInstance 是当前应用程序的句柄,该设什么就设什么
lpBitmapName 就是图像的文件名,这个不用多说吧~
 楼主| 发表于 2006-11-29 09:10:26 | 显示全部楼层
啊好详细~~~~
感谢楼上~~~~
我先去写写,有问再提~~~~~~
 楼主| 发表于 2006-11-29 14:22:41 | 显示全部楼层
成功了~哇哈哈
 楼主| 发表于 2006-11-28 21:30:20 | 显示全部楼层 |阅读模式
  这个,BMP图片的数据结构我还是baidu了下,但是怎么让VC读入一图片并存在X(不知道什么数据类型是用来存BMP的)里,哪位高手能帮个忙解释下吗。
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-3-29 02:28 , Processed in 0.009849 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表