| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1089 人关注过本帖
标题:两个位图子程序,请高手帮忙
只看楼主 加入收藏
zhsyc
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2004-12-15
收藏
 问题点数:0 回复次数:2 
两个位图子程序,请高手帮忙
子程序1用于从硬盘文件生成一个位图句柄,供下一步显示用。
  入口:hWnd -->用此句柄的设备环境作为位图句柄的设备环境
       lpFileName -->指向一个BMP文件名的字符串
  出口:位图句柄
_CreateBmp proc hWnd,lpFileName
local @hFile,@hFileMap,@lpMemory,@dwFileSize,@hBitmap,@lpBitmapBits,\\
@dwWidth,@dwHeight,@hDcBitmap,@hDcWnd,@lpBitmapInfo
invoke CreateFile,lpFileName,GENERIC_READ,FILE_SHARE_READ,0,\\
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0
.if eax == INVALID_HANDLE_value
mov eax,0
ret
.endif
mov @hFile,eax
invoke GetFileSize,@hFile,NULL
mov @dwFileSize,eax
invoke CreateFileMapping,@hFile,NULL,PAGE_READONLY,0,0,NULL
.if ! eax
invoke CloseHandle,@hFile
mov eax,0
Ret
.endif
mov @hFileMap,eax
invoke MapViewOfFile,eax,FILE_MAP_READ,0,0,0
.if ! eax
invoke CloseHandle,@hFileMap
invoke CloseHandle,@hFile
Ret
.endif
mov @lpMemory,eax
pushad
mov @hBitmap,0
mov esi,@lpMemory
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
invoke GetDC,hWnd
mov @hDcWnd,eax
invoke CreateCompatibleDC,eax
mov @hDcBitmap,eax
invoke CreateCompatibleBitmap,@hDcWnd,@dwWidth,@dwHeight
mov @hBitmap,eax
invoke SelectObject,@hDcBitmap,@hBitmap
invoke ReleaseDC,hWnd,@hDcWnd
invoke SetDIBitsToDevice,@hDcBitmap,0,0,@dwWidth,@dwHeight,\\
0,0,0,@dwHeight,@lpBitmapBits,@lpBitmapInfo,\\
DIB_RGB_COLORS
.if eax == 0
invoke DeleteObject,@hBitmap
mov @hBitmap,0
.else
; invoke wsprintf,addr szBuffer,addr szFormatFont,@dwFileSize,@dwWidth,@dwHeight
.endif
invoke UnmapViewOfFile,@lpMemory
invoke DeleteDC,@hDcBitmap
invoke CloseHandle,@hFileMap
invoke CloseHandle,@hFile
popad
mov eax,@hBitmap
ret
_CreateBmp endp

第二个子程序,拷贝位图信息用于显示
  入口:hWnd2 -->用于显示的窗口句柄
        hWnd1 -->上一个子程序生成的位图句柄
  出口:无
_copyhdc proc hWnd2,hWnd1
local @hDc1,@hDc2
local @stRect:RECT
invoke GetDC,hWnd1
mov @hDc1,eax
invoke GetDC,hWnd2
mov @hDc2,eax
invoke GetClientRect,hWnd2,addr @stRect
invoke BitBlt,@hDc2,0,0,@stRect.right,@stRect.bottom,\\
@hDc1,0,0,SRCCOPY
invoke ReleaseDC,hWnd1,@hDc1
invoke ReleaseDC,hWnd2,@hDc2
ret

_copyhdc endp

这两个子程序,分别调试时,前一个子程序可以正常看到位图尺寸等信息,后一个子程序能正常拷贝位图信息,但就是两个子程序用下面两个命令执行是不能看到位图信息。
请高手帮忙
调用这两个子程序的命令如下:
invoke _CreateBmp,hWinMain1,addr bmpfilename
.if eax
mov hBmp,eax
invoke _copyhdc,hWinMain1,hBmp
.endif
搜索更多相关主题的帖子: 子程序 位图 
2008-10-05 07:57
ONEPROBLEM
Rank: 6Rank: 6
来 自:广西 南宁
等 级:贵宾
威 望:21
帖 子:1569
专家分:349
注 册:2008-7-11
收藏
得分:0 
LZ,你说两个子程序在调试时,都没有问题;而调用这两个子程序的命令,我看参数的传递也应该没有什么问题.
程序在编译时通过了吗?既然看不到位图的信息,可能还跟程序的其它部分有关呢?
建议:
1,可否把整个程序发出来?太大的话可以打包的;
2,程序有点注释比较好,方便大家阅读,并帮助找出问题的所在.
2008-10-05 23:30
ww147398060
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2010-5-29
收藏
得分:0 
程序中的图形文件是什么格式的?谢谢
2010-05-30 23:19
快速回复:两个位图子程序,请高手帮忙
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025875 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved