|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 lslin 于 2013-11-14 09:03 编辑
_CreateDIBitmap proc _hWnd,_lpFileData
local @lpBitmapInfo,@lpBitmapBits
local @dwWidth,@dwHeight
local @hDc,@hBitmap
pushad
mov @hBitmap,0
mov esi,_lpFileData
mov eax,BITMAPFILEHEADER.bfOffBits [esi]
add eax,esi
mov @lpBitmapBits,eax
add esi,sizeof BITMAPFILEHEADER
mov @lpBitmapInfo,esi
.if BITMAPINFO.bmiHeader.biSize [esi] == sizeof BITMAPCOREHEADER
movzx eax,BITMAPCOREHEADER.bcWidth [esi]
movzx ebx,BITMAPCOREHEADER.bcHeight [esi]
.else
mov eax,BITMAPINFOHEADER.biWidth [esi]
mov ebx,BITMAPINFOHEADER.biHeight [esi]
.endif
mov @dwWidth,eax
mov @dwHeight,ebx
;********************************************************************
; 建立空的 Bitmap Object
;********************************************************************
invoke GetDC,_hWnd
push eax
invoke CreateCompatibleDC,eax
mov @hDc,eax
pop eax
push eax
invoke CreateCompatibleBitmap,eax,@dwWidth,@dwHeight
mov @hBitmap,eax
invoke SelectObject,@hDc,@hBitmap
pop eax
invoke ReleaseDC,hWinMain,eax
;********************************************************************
; 将文件内容设置到建立的 Bitmap 中
;********************************************************************
invoke SetDIBitsToDevice,@hDc,0,0,@dwWidth,@dwHeight,\
0,0,0,@dwHeight,\
@lpBitmapBits,@lpBitmapInfo,DIB_RGB_COLORS
.if eax == 0
invoke DeleteObject,@hBitmap
mov @hBitmap,0
.endif
invoke DeleteDC,@hDc
popad
mov eax,@hBitmap
ret
_CreateDIBitmap endp
这是书上的子程序,mov eax,BITMAPFILEHEADER.bfOffBits [esi]
这个BITMAPFILEHEADER.bfOffBits [esi]是什么意思,
当然结构体是在前面已经定义好了的。
BITMAPFILEHEADER STRUCT
bfType WORD ? ;文件标识,必须是“BM”
bfSize DWORD ? ;文件长度
bfReserved1 WORD ? ;0
bfReserved2 WORD ? ;0
bfOffBits DWORD ? ;位图像素数据在文件中的起始位置
BITMAPFILEHEADER ENDS
知道的帮我解答一下, |
|