- 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 = 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;
- RGBQUAD rgb[256];
- LPLOGPALETTE pLogPal;
- WORD i;
- // Create a memory DC and select the DIBSection into it
- hMemDC = CreateCompatibleDC( NULL );
- hOldBitmap = SelectObject( hMemDC, *phBitmap );
- // Get the DIBSection's color table
- GetDIBColorTable( hMemDC, 0, 256, rgb );
- // Create a palette from the color table
- pLogPal = malloc( sizeof(LOGPALETTE) + (256*sizeof(PALETTEENTRY)) );
- pLogPal->palVersion = 0x300;
- pLogPal->palNumEntries = 256;
- for(i=0;i<256;i++)
- {
- pLogPal->palPalEntry[i].peRed = rgb[i].rgbRed;
- pLogPal->palPalEntry[i].peGreen = rgb[i].rgbGreen;
- pLogPal->palPalEntry[i].peBlue = rgb[i].rgbBlue;
- pLogPal->palPalEntry[i].peFlags = 0;
- }
- *phPalette = CreatePalette( pLogPal );
- // Clean up
- free( pLogPal );
- SelectObject( hMemDC, hOldBitmap );
- DeleteDC( hMemDC );
- }
- else // It has no color table, so use a halftone palette
- {
- HDC hRefDC;
- hRefDC = GetDC( NULL );
- *phPalette = CreateHalftonePalette( hRefDC );
- ReleaseDC( NULL, hRefDC );
- }
- return TRUE;
- }
- //The following code demonstrates how to use the LoadBitmapFromBMPFile function:
- case WM_PAINT:
- {
- PAINTSTRUCT ps;
- HBITMAP hBitmap, hOldBitmap;
- HPALETTE hPalette, hOldPalette;
- HDC hDC, hMemDC;
- BITMAP bm;
- hDC = BeginPaint( hWnd, &ps );
- if( LoadBitmapFromBMPFile( zFileName, &hBitmap, &hPalette ) )
- {
- GetObject( hBitmap, sizeof(BITMAP), &bm );
- hMemDC = CreateCompatibleDC( hDC );
- hOldBitmap = SelectObject( hMemDC, hBitmap );
- hOldPalette = SelectPalette( hDC, hPalette, FALSE );
- RealizePalette( hDC );
- BitBlt( hDC, 0, 0, bm.bmWidth, bm.bmHeight, hMemDC, 0, 0, SRCCOPY );
- SelectObject( hMemDC, hOldBitmap );
- DeleteObject( hBitmap );
- SelectPalette( hDC, hOldPalette, FALSE );
- DeleteObject( hPalette );
- }
- EndPaint( hWnd, &ps );
- break;
- }
加载BMP文件 并绘制
最新推荐文章于 2019-06-09 14:39:17 发布