鱼C论坛

 找回密码
 立即注册
查看: 1896|回复: 1

源操作数表示的意思。mov eax,BITMAPFILEHEADER.bfOffBits [esi]

[复制链接]
发表于 2013-8-8 10:10:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

知道的帮我解答一下,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-9 01:19:46 From FishC Mobile | 显示全部楼层
用dup定义了结构体数组
[esi]指向你要引用的元素的首地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-29 05:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表