搜索
您的当前位置:首页正文

写了一个非常方便的图像读取模块,支持bmp、jpg、gif、png、tiff等,内符详细使用说明和源代码

来源:知库网
使用说明: 1. 在你的硬盘上建立下面三个文件: ZImage.h——头声明 ZImage.cpp——源文件 WinMain.cpp——范例测试程序 2.把下面的代码按照所给文件名复制到相同的文件中。 3.如果您是VC6.0用户:新建一个win32工程,然后勾上空项目并等待创建成功。 然后在工程管理器里,把上面所述三个文件分别添加到相应文件夹里。编译后即可运行。 如果您是VS.net用户:新建一个win32工程,然后勾上空项目并等待创建成功。 然后在解决方案管理器里,把上面所述三个文件分别添加到相应文件夹里。编译后即可运行。 测试程序使用方法: 在窗口里单击鼠标左键,然后选择一个图像文件,并打开,您就可以在窗口里看到这幅图像了。 附: 1. 如果您仍然无法顺利通过编译,请回复或留言,我将尽快给予答复。 2. 本程序仅供测试使用,使用本程序完全是您的自愿,如果对您的计算机产生任何影响,本人概不负责但您可以任意复制本贴子的地址。 //======================================================================= // ZImage.h #ifndef ZImage_H #define ZImage_H #include #include using namespace Gdiplus; // 安全的删除指针 p = NULL; } // 封装读取函数,以一次性方便调用。 // r - 返回的指针;s - 要打开的文件名;p - BITMAPINFO结构体指针 3. 此代码您只能保留一份复本,未经本人允许,您不得通过复制、上传、转贴等手段在互联网上传播此#define SAFEDELETE(p) if ( p ) { try{ delete []p; } catch(...#define LOADDZIMAGE( r, s, p ) ManagerZImage( );r = LoadZImage( p );ManagerZImage( ); // 断言 #define ASSERT(f) if( (f) ) throw \"执行( \"#f## \")时出错! \" // 管理对象起动 void ManagerZImage( void ); // 读取位图文件 LPVOID LoadZImage( char *pFileName, LPBITMAPINFO pbi ); // 释放内存 void FreeZImage( LPVOID pBuf ); // 获取最后一个错误信息字符串 LPCTSTR GetZImageLastError(); #endif //======================================================================= // ZImage.cpp #include \"ZImage.h \" #pragma comment( lib, \"GdiPlus.lib \" ) ULONG_PTR g_GdiPlusToken; LPTSTR g_szLastErrorMessage; void ManagerZImage( void ) { if ( g_GdiPlusToken ) { GdiplusShutdown( g_GdiPlusToken ); g_GdiPlusToken = NULL; } else { GdiplusStartupInput GdiPlus; GdiplusStartup( &g_GdiPlusToken, &GdiPlus, NULL ); } } LPVOID ReleaseGdiResource( HDC hdc, HBITMAP hBitmap ) { if ( hdc ) { DeleteDC( hdc ); } if ( hBitmap ) { DeleteObject( hBitmap ); } return NULL; } LPVOID LoadZImage( char *pFileName, LPBITMAPINFO pbi ) { HDC hComDC = NULL; HDC hdc; HBITMAP hBitmap = NULL; UINT nWidth, nHeight; WCHAR szFileName[MAX_PATH]; LPVOID pBuf = NULL; try { ASSERT( NULL == ( hdc = GetDC( NULL )) ); hComDC = CreateCompatibleDC( hdc ); ASSERT( NULL == hdc ); ZeroMemory( szFileName, sizeof(szFileName) ); HARS, pFileName, (int)strlen( pFileName ), szFileName, sizeof(szFileName) ); Image Img( szFileName ); ASSERT( Ok != Img.GetLastStatus() ); nWidth = Img.GetWidth(); nHeight = Img.GetHeight(); ASSERT( 0 == nWidth * nHeight ); ASSERT( NULL== (hBitmap = CreateCompatibleBitmap( hdc, nWidth, nHeight ) ); ASSERT( HGDI_ERROR == SelectObject( hComDC, hBitmap ) ); ASSERT( 0 == MultiByteToWideChar( CP_ACP, MB_USEGLYPHCHARS | MB_ERR_INVALGraphics g( hComDC ); ASSERT( Ok != g.GetLastStatus() ); ASSERT( Ok != g.DrawImage( &Img, 0, 0, nWidth, nHeight ) ); ZeroMemory( pbi, sizeof(BITMAPINFO) ); pbi-> bmiHeader.biSize = sizeof(BITMAPINFOHEADER); LORS ) ); bmiHeader.biBitCount / 8; ASSERT( dwBufSize == 0 ); ASSERT( 0 == GetDIBits( hComDC, hBitmap, 0, 0, NULL, pbi, DIB_RGDWORD dwBufSize = pbi-> bmiHeader.biWidth * pbi-> bmiHeader.biHeight * pbASSERT( NULL == (pBuf = GlobalAlloc( GMEM_FIXED, dwBufSize ) ) )f, pbi, DIB_RGB_COLORS ) ); } catch ( char *p ) { if ( pBuf ) { GlobalFree( pBuf ); pBuf = NULL; } g_szLastErrorMessage = p; } ReleaseGdiResource( hdc, hBitmap ); return pBuf; } void FreeZImage( LPVOID pBuf ) { GlobalFree( pBuf ); } LPCTSTR GetZImageLastError() { return NULL == g_szLastErrorMessage ? \" \" : g_szLastErrorMessage; } ASSERT( 0 == GetDIBits( hComDC, hBitmap, 0, pbi-> bmiHeader.biHeight, 对我有用[0] 丢个板砖[0] 引用 举报 管理 TOP 回复次数:34 #1楼 得分:0回复于:2003-08-29 22:38:19 // WinMain.cpp • • • • • #include fireseed (奶油狗) 等 级: #include \"ZImage.h \" LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); void OnLButtonDown(); HBITMAP g_hComBmp; HDC g_hComDC; HWND g_hWnd; RECT g_BmpRect; iCmdShow) { static TCHAR szAppName[] = TEXT( \"HelloWin \"); MSG msg; WNDCLASS wndclass; ZeroMemory( &wndclass, sizeof(wndclass) ); wndclass.lpfnWndProc = WndProc; wndclass.hInstance = hInstance; wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION); wndclass.hCursor = LoadCursor(NULL,IDC_ARROW); wndclass.hbrBackground =(HBRUSH) GetStockObject(WHITE_BRUSH); wndclass.lpszClassName = szAppName; int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstancif(!RegisterClass(&wndclass)) { MessageBox(NULL,TEXT( \"注册窗体类失败! \"),szAppName,MB_ICONERROR); return 0; } CreateWindow(szAppName, TEXT( \"打开图像 \"), WS_OVERLAPPEDWINDOW, ShowWindow(g_hWnd, iCmdShow); UpdateWindow(g_hWnd); // 创建内存设备环境 g_hComDC = CreateCompatibleDC( GetDC( g_hWnd ) ); if ( NULL == g_hComDC ) { return 0; } while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return (int)msg.wParam; } lParam) { PAINTSTRUCT ps; HDC hdc; switch(message) { case WM_LBUTTONDOWN: OnLButtonDown(); break; case WM_CREATE: g_hWnd = hwnd; break; 200, 200, 400, 300, NULL, NULL, hInstance, NULL); MessageBox( g_hWnd, \"内存设备环境创建失败 \ \"错误 \ MB_ICONLRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAcase WM_DESTROY: // 释放资源 if ( g_hComBmp ) { DeleteObject( g_hComBmp ); } PostQuitMessage(0); break; case WM_PAINT: hdc = BeginPaint(hwnd, &ps); BitBlt( hdc, g_BmpRect.left, g_BmpRect.top, EndPaint(hwnd, &ps); break; default: return DefWindowProc(hwnd, message, wParam, lParam); } return 0; } void OnLButtonDown() { OPENFILENAME ofn; ZeroMemory( &ofn, sizeof(ofn) ); char szFile[MAX_PATH]; ZeroMemory( szFile, sizeof(szFile) ); ofn.lStructSize = sizeof(OPENFILENAME); ofn.lpstrFile = szFile; ofn.nMaxFile = sizeof(szFile); ofn.lpstrFilter = \"所有文件(*.*)\\0*.* \"; ofn.lpstrTitle = \"打开文件 \"; ofn.Flags = OFN_PATHMUSTEXIST | OFN_EXPLORER; if ( !GetOpenFileName( &ofn ) ) { return; } LPVOID pBuf; char szBiBuf[1024]; g_BmpRect.right, g_BmpRect.bottom, g_hComDC, 0, 0, SRCCOPY

LPBITMAPINFO pbi = (LPBITMAPINFO)szBiBuf; if ( g_hComBmp ) { DeleteObject( g_hComBmp ); } LOADDZIMAGE( pBuf, szFile, pbi ); if ( NULL == pBuf ) { MessageBox( g_hWnd, GetZImageLastError(), \"错误 \ MB_ICONHANreturn; } g_hComBmp = CreateCompatibleBitmap( GetDC( g_hWnd ), pbi-> bmiHeader.biWidth, pbi-> bmiHeader.biHeight ); SetDIBits( NULL, g_hComBmp, 0, pbi-> bmiHeader.biHeight, pBuf, pbi, DIB_RGB_COLORS ); SelectObject( g_hComDC, g_hComBmp ); FreeZImage( pBuf ); g_BmpRect.right = pbi-> bmiHeader.biWidth; g_BmpRect.bottom = pbi-> bmiHeader.biHeight; InvalidateRect( g_hWnd, NULL, TRUE ); }

因篇幅问题不能全部显示,请点此查看更多更全内容

Top