Visual C++ 编程问题

来源:百度知道 编辑:UC知道 时间:2024/06/24 06:22:59
如果将DIB(设备无关位图)位图文件整个读入内存
使用位图文件我们可以先将位图定义成Res资源,然后在程序中调用LoadBitmap()来获取,但是如果我要装载一个磁盘里的位图文件,而资源中并没有定义,所以无法使用LoadBitmap() 应该如何将一个位图文件读入到内存中呢?

孙鑫 VC++6.0深入详解没有特别的介绍~~~~
这个函数我知道的,我只是拿这个位图来举一个例子而已,我只是想知道,如果将一个 比如 位图文件DIB装入内存

个人认为有两种简单的方法动态的将位图导入系统中:
1。CFileDialog aDlg; aDlg.Domodal();可以获得文件名,相应的路径。然后在通过CImage类来导入相应文件。
2。通过CDoc类中的void Serialize(CArchive& ar);,然后ar.Load()就OK了。

当然我提供的方法仅在由向导建成的项目优先哈。。。[个人意见]

BOOL LoadBitmapFromBMPFile( LPTSTR szFileName, HBITMAP *phBitmap,
HPALETTE *phPalette )
{

// BITMAP bm;

*phBitmap = NULL;
*phPalette = NULL;

// Use LoadImage() to get the image loaded into a DIBSection
*phBitmap = (HBITMAP)LoadImage( NULL, szFileName, IMAGE_BITMAP, 0, 0,
LR_CREATEDIBSECTION | LR_DEFAULTSIZE | LR_LOADFROMFILE );
if( *phBitmap == NULL )
return FALSE;

// Get the color depth of the DIBSection
GetObject(*phBitmap, sizeof(BITMAP), &bm );
// If the DIBSection is 256 color or less, it has a color table
if( ( bm.bmBitsPixel * bm.bmPlanes ) <= 8 )
{
HDC hMemDC;
HBITMAP hOldBitmap