⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 procwinmain.asm

📁 这是一个数字图像处理的matlab仿真程序
💻 ASM
字号:
include		HuffmanDecode.asm		
		.const
IniFileName	db	'.\Huffman.ini',0
SectionName	db	'图片',0
KeyName		db	'输出文件',0
DefaultInput	db	'千与千寻.huf',0
		.code
ProcWinMain?	proc	uses ebx edi esi,hWnd,uMsg,wParam,lParam
		local	@hFile,@hFileMap,@lpMemory
		local	@hWindowDC,@hCompatibleDC,@hBitmap
		local	@dwWidth,@dwHeight
		local	@FileName[MAX_PATH]:byte
		mov	eax,uMsg
		.if	eax ==	WM_CREATE
			invoke	GetPrivateProfileString,offset SectionName,offset KeyName,offset DefaultInput,addr @FileName,MAX_PATH,offset IniFileName
			invoke	CreateFile,addr @FileName,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL
			.if	eax !=	INVALID_HANDLE_VALUE
				mov	@hFile,eax
				invoke	CreateFileMapping,@hFile,NULL,PAGE_READONLY,0,0,NULL
				mov	@hFileMap,eax
				invoke	MapViewOfFile,@hFileMap,FILE_MAP_READ,0,0,0
				mov	@lpMemory,eax
				invoke	HuffmanDecode?,@lpMemory;输出位图信息结构和颜色数据的指针
				.if	eax			;解码成功才画位图,否则无操作
					mov	edi,eax					;esi指向信息结构
					mov	esi,@lpMemory
					add	esi,4+256*8
					assume	esi:ptr BITMAPINFOHEADER
					m2m	@dwWidth,[esi].biWidth
					m2m	@dwHeight,[esi].biHeight
					assume	esi:nothing
					;--------------------------------
					;参考窗口DC,建立兼容位图DC和位图
					;--------------------------------
					invoke	GetDC,hWnd
					mov	@hWindowDC,eax
					invoke	CreateCompatibleDC,@hWindowDC
					mov	@hCompatibleDC,eax
					invoke	CreateCompatibleBitmap,@hWindowDC,@dwWidth,@dwHeight
					mov	@hBitmap,eax
					;----------------------------------
					;将位图选入兼容DC,并通过DC操作位图
					;----------------------------------
					invoke	SelectObject,@hCompatibleDC,@hBitmap
					invoke	DeleteObject,eax
					invoke	SetDIBitsToDevice,@hCompatibleDC,0,0,@dwWidth,@dwHeight,\
						0,0,0,@dwHeight,edi,esi,DIB_RGB_COLORS
					invoke	GlobalFree,esi
					;------------------------------
					;以位图创建画刷,并选入窗口背景
					;------------------------------
					invoke	CreatePatternBrush,@hBitmap
					invoke	SetClassLong,hWnd,GCL_HBRBACKGROUND,eax
					invoke	DeleteObject,eax
					invoke	InvalidateRect,hWnd,NULL,TRUE
					;--------
					;清扫工作
					;--------
					invoke	DeleteDC,@hCompatibleDC
					invoke	DeleteObject,@hBitmap
					invoke	ReleaseDC,hWnd,@hWindowDC
				.endif
				;------------------
				;清扫建立的内存文件
				;------------------
				invoke	UnmapViewOfFile,@lpMemory
				invoke	CloseHandle,@hFileMap
				invoke	CloseHandle,@hFile
			.endif
		.elseif	eax ==	WM_CLOSE
			invoke	DestroyWindow,hWinMain
			invoke	PostQuitMessage,NULL
		.else
			invoke	DefWindowProc,hWnd,uMsg,wParam,lParam
			ret
		.endif
		xor	eax,eax
		ret
ProcWinMain?	endp

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -