显示BMP位图文件模块

  .data?
MYBMP_hWnd   dd  ?
MYBMP_dwWidth  dd  ?
MYBMP_hDC   dd  ?
MYBMP_dwHeight  dd  ?
  .code
_UnLoadBMP proc
 .if MYBMP_hDC
  invoke DeleteDC,MYBMP_hDC
 .endif
 mov MYBMP_hWnd,0
 mov MYBMP_hDC,0
 mov MYBMP_dwWidth,0
 mov MYBMP_dwHeight,0
 ret
_UnLoadBMP endp

_LoadBMP  proc  _hWnd,_lpFileName
 local  @hFile,@hFileMap,@lpMemory,@lpBitmapBits,@lpBitmapInfo
 local  @dwWidth,@dwHeight,@hTempDC,@hBitmap
 
 invoke _UnLoadBMP
 push  _hWnd
 pop  MYBMP_hWnd
 invoke CreateFile,_lpFileName,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0
 .if eax == INVALID_HANDLE_VALUE
  jmp Err
 .endif
 mov @hFile,eax
 invoke CreateFileMapping,@hFile,NULL,PAGE_READONLY,0,0,NULL
 .if !eax
  invoke CloseHandle,@hFile
  jmp Err
 .endif
 mov @hFileMap,eax
 invoke MapViewOfFile,@hFileMap,FILE_MAP_READ,0,0,0
 .if !eax
  invoke CloseHandle,@hFileMap
  invoke CloseHandle,@hFile
  jmp Err
 .endif
 mov @lpMemory,eax
 mov esi,eax
 .if BITMAPFILEHEADER.bfType[esi] != 'BM'
  invoke UnmapViewOfFile,@lpMemory
  invoke CloseHandle,@hFileMap
  invoke CloseHandle,@hFile
  jmp Err
 .endif
 mov eax,BITMAPFILEHEADER.bfOffBits[esi]
 add eax,esi
 mov @lpBitmapBits,esi
 add esi,sizeof BITMAPFILEHEADER
 mov @lpBitmapInfo,esi
 .if BITMAPINFO.bmiHeader.biSize[esi] == sizeof BITMAPCOREHEADER
  movzx  eax,BITMAPCOREHEADER.bcWidth[esi]
  movzx  ebx,BITMAPCOREHEADER.bcHeight[esi]
 .elseif
  mov  eax,BITMAPINFOHEADER.biWidth[esi]
  mov  eax,BITMAPINFOHEADER.biHeight[esi]
 .endif
 mov MYBMP_dwWidth,eax
 mov MYBMP_dwHeight,ebx
 invoke GetDC,_hWnd
 mov  @hTempDC,eax
 invoke CreateCompatibleDC,eax
 mov  MYBMP_hDC,eax
 invoke CreateCompatibleBitmap,@hTempDC,MYBMP_dwWidth,MYBMP_dwHeight
 mov  @hBitmap,eax
 invoke SelectObject,MYBMP_hDC,@hBitmap
 invoke   SetDIBitsToDevice,MYBMP_hDC,0,0,MYBMP_dwWidth,MYBMP_dwHeight,0,0,0,MYBMP_dwHeight,@lpBitmapBits,@lpBitmapInfo,DIB_RGB_COLORS
 invoke ReleaseDC,_hWnd,@hTempDC
 invoke DeleteObject,@hBitmap
 invoke UnmapViewOfFile,@lpMemory
 invoke CloseHandle,@hFileMap
 invoke CloseHandle,@hFile
 mov  eax,TRUE
 ret
Err:
 mov eax,FALSE
 ret
_LoadBMP  endp

_ShowBMP  proc
 local  @hTempDC
 
 invoke GetDC,MYBMP_hWnd
 mov  @hTempDC,eax
 invoke BitBlt,@hTempDC,0,0,MYBMP_dwWidth,MYBMP_dwHeight,MYBMP_hDC,0,0,SRCCOPY
 invoke ReleaseDC,MYBMP_hWnd,@hTempDC
 ret
_ShowMBP  endp

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值