步骤和程序: 打开 VC
程序——文件——新建——工程中的 MFC AppWizard(exe),在工程下 面的框中输入工程名(假定工程名为 111),点确定——选多重
文档,点下一个 ——后面都点下一个直到完成确定,基本框架就完成了,下面就加代码。 这时 VC 界面上左边框的下面有三个按钮:ClassView、ResourceView 和 FileView,ClassView 里面是工程 111 的类:CAdoutDlg、CChildFrame、 CMy111App、CMy111Doc、CMy111View 和 Globals;点 ResourceView 里面 是资源类: Accelerator、 Dialog、 Icon、 Menu、 String Table、 Toolbar 和 Version; 点开 FileView 里面是文件类:Source File、Header Files、Resource Files 和 ReadMe.txt。 点界面的“工程”按钮——添加工程——新建——选 C++ Source File,在文件下 面的框里输入文件名 (如 DIBAPI) 点“结束”, , 这样在 FileView 中的 Source Files 里面就多了一个 DIBAPI.cpp 文件,所有的代码都加在该文件中。再点界面的“工 程”按钮——添加工程——新建——选 C/C++ Header File, 在文件下面的框里输 入文件名 (和前面的文件名必须一致) 点“结束”, , 这样在 FileView 中的 Header Files 里面就多了一个 DIBAPI.h 文件,该文件是 DIBAPI.cpp 的头文件。 点开 DIBAPI.h 文件,里面是空白的,把如下代码考入文件中: //DIBAPI.h #ifndef _INC_DIBAPI #define _INC_DIBAPI
DECLARE_HANDLE(HDIB); #define PALVERSION 0x300 #define IS_WIN30_DIB(lpbi) ((*(LPDWORD)(lpbi))==sizeof(BITMAPINFOHEADER)) #define RECTWIDTH(lpRect) #define RECTHEIGHT(lpRect) #define WIDTHBYTES(bits) #define DIB_HEADER_MARKER ((lpRect)->right-(lpRect)->left) ((lpRect)->bottom-(lpRect)->top) (((bits)+31)/32*4) ((WORD)('M'<<8)|'B')
BOOL WINAPI PaintDIB(HDC,LPRECT,HDIB,LPRECT,CPalette* pPal); BOOL WINAPI CreateDIBPalette(HDIB hDIB,CPalette* cPal); LPSTR WINAPI FindDIBBits(LPSTR lpbi); DWORD WINAPI DIBWidth(LPSTR lpDIB);
DWORD WINAPI DIBHeight(LPSTR lpDIB); WORD WINAPI PaletteSize(LPSTR lpbi); WORD WINAPI DIBNumColors(LPSTR lpbi); HGLOBAL WINAPI CopyHandle(HGLOBAL h); BOOL WINAPI SaveDIB(HDIB hDib,CFile&; file); HDIB WINAPI ReadDIBFile(CFile&; file); //在此处输入自己的函数声明
#endif//!_INC_DIBAPI 上面这些函数是实现图像的读取、存储等图像处理的基本功能的,你将自己需要 的函数也输入到“//在此处输入自己的函数声明”的下面。 点开 DIBAPI.cpp 文件,里面是空白的,将如下代码加入其中: //DIBAPI.cpp #include "stdafx.h" #include "DIBAPI.h" WORD WINAPI DIBNumColors(LPSTR lpbi) { WORD wBitCount; if(IS_WIN30_DIB(lpbi)) { DWORD dwClrUsed; dwClrUsed=((LPBITMAPINFOHEADER)lpbi)->biClrUsed; if(dwClrUsed) return (WORD)dwClrUsed; } if(IS_WIN30_DIB(lpbi)) wBitCount=((LPBITMAPINFOHEADER)lpbi)->biBitCount; else wBitCount=((LPBITMAPCOREHEADER)lpbi)->bcBitCount; switch(wBitCount) { case 1:
return 2; case 4: return 16; case 8: return
256; default: return 0; } } WORD WINAPI PaletteSize(LPSTR lpbi) { if(IS_WIN30_DIB(lpbi)) return (WORD)(DIBNumColors(lpbi)*sizeof(RGBQUAD)); else return (WORD)(DIBNumColors(lpbi)*sizeof(RGBTRIPLE)); }
LPSTR WINAPI FindDIBBits(LPSTR lpbi) { return (lpbi+*(LPDWORD)lpbi+::PaletteSize(lpbi)); } DWORD WINAPI DIBWidth(LPSTR lpDIB) { LPBITMAPINFOHEADER lpbmi; LPBITMAPCOREHEADER lpbmc; lpbmi=(LPBITMAPINFOHEADER)lpDIB; lpbmc=(LPBITMAPCOREHEADER)lpDIB; if(IS_WIN30_DIB(lpDIB)) return lpbmi->biWidth; else return (DWORD)lpbmc->bcWidth; } DWORD WINAPI DIBHeight(LPSTR