加载BMP文件 并绘制
2013年10月10日
⁄ 综合
⁄ 共 2490字 ⁄ 字号
小 中 大
- BOOL LoadBitmapFromBMPFile( LPTSTR szFileName, HBITMAP *phBitmap, HPALETTE *phPalette )
- {
- BITMAP bm;
- *phBitmap = NULL;
- *phPalette = NULL;
-
- *phBitmap = LoadImage( NULL, szFileName, IMAGE_BITMAP, 0, 0,
- LR_CREATEDIBSECTION | LR_DEFAULTSIZE | LR_LOADFROMFILE );
- if( *phBitmap == NULL )
- return FALSE;
-
- GetObject(*phBitmap, sizeof(BITMAP), &bm );
-
- if( ( bm.bmBitsPixel * bm.bmPlanes ) <= 8 )
- {
- HDC hMemDC;
- HBITMAP hOldBitmap;
- RGBQUAD rgb[256];
- LPLOGPALETTE pLogPal;
- WORD i;
-
- hMemDC = CreateCompatibleDC( NULL );
- hOldBitmap = SelectObject( hMemDC, *phBitmap );
-
- GetDIBColorTable( hMemDC, 0, 256, rgb );
-
- 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 );
-
- free( pLogPal );
- SelectObject( hMemDC, hOldBitmap );
- DeleteDC( hMemDC );
- }
- else
- {
- HDC hRefDC;
- hRefDC = GetDC( NULL );
- *phPalette = CreateHalftonePalette( hRefDC );
- ReleaseDC( NULL, hRefDC );
- }
- return TRUE;
- }
- 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;
- }