VC6 我获取了一个验证码是PNG格式的,但是显示不会弄!网上也找不到详细代码!

佬侽人 2014-01-25 12:50:17
VC6 我获取了一个验证码是PNG格式的,但是显示不会弄!网上也找不到详细代码!求成熟的例子!
...全文
151 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
大头猫 2014-01-28
  • 打赏
  • 举报
回复
CImage类,搜索下,简单易用。
healer_kx 2014-01-27
  • 打赏
  • 举报
回复
引用 3 楼 xiaohuh421 的回复:
GDI+ Image::FromFile Graphics::DrawImage
UP!
lgstudyvc 2014-01-26
  • 打赏
  • 举报
回复
识别验证码?
xiaohuh421 2014-01-26
  • 打赏
  • 举报
回复
GDI+ Image::FromFile Graphics::DrawImage
QZ_uitron 2014-01-25
  • 打赏
  • 举报
回复
这有个测试程序,你看看能不能帮到你 1.是MFC工程 2.创建默认工程:单文档工程 3.工程名:JPEGTest 4.1在CJPEGTestView类中添加 HANDLE m_hFile; CImage m_Image; void LoadMemImage( void * pMemData, long len); afx_msg void OnFileOpen(); 4.2在stdafx.h中添加#include 4.3在CJPEGTestView.cpp中添加 BEGIN_MESSAGE_MAP(CJPEGTestView, CView) ON_COMMAND(ID_FILE_OPEN, &CJPEGTestView::OnFileOpen)//这个是添加的 END_MESSAGE_MAP() 4.4 void CJPEGTestView::OnFileOpen() { CString strFilter; CSimpleArray aguidFileTypes; HRESULT hResult; // 获取CImage支持的图像文件的过滤字符串 hResult = m_Image.GetExporterFilterString(strFilter,aguidFileTypes, _T( "All Image Files") ); if ( FAILED(hResult) ) { MessageBox(_T("GetExporterFilter调用失败!")); return; } CFileDialog dlg( TRUE, NULL, NULL, OFN_FILEMUSTEXIST, strFilter ); if ( IDOK != dlg.DoModal() ) return; m_Image.Destroy(); { //在此处是用流的方式显示JPEG m_hFile = ::CreateFile(dlg.GetFileName(),GENERIC_READ,0,NULL,OPEN_EXISTING, FILE_ATTRIBUTE_READONLY,NULL); // 用这个函数比OpenFile好 if ( m_hFile == INVALID_HANDLE_VALUE) { MessageBox(_T("打开文件失败")); CloseHandle( m_hFile ); // 一定注意在函数退出之前对句柄进行释放。 return; } DWORD filesize=GetFileSize( m_hFile,NULL ); char* buffer=new char[filesize+1]; // 最后一位为 '/0',C-Style 字符串的结束符。 DWORD readsize; ReadFile( m_hFile,buffer,filesize,&readsize,NULL); buffer[filesize]=0; LoadMemImage(buffer,readsize); delete[] buffer; // 注意是delete[] 而不是 delete CloseHandle(m_hFile); // 关闭句柄。 } //在此处是用文件的方式显示JPEG // 将外部图像文件装载到CImage对象中 hResult = m_Image.Load( dlg.GetFileName() ); if ( FAILED(hResult) ) { MessageBox(_T("调用图像文件失败!")); return; } // 设置主窗口标题栏内容 CString str; str.LoadString(AFX_IDS_APP_TITLE); AfxGetMainWnd()->SetWindowText(str + _T("_") + dlg.GetFileName()); Invalidate(); // 强制调用OnDraw } void CJPEGTestView::LoadMemImage( void * pMemData, long len) { HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, len); void * pData = GlobalLock(hGlobal); memcpy(pData, pMemData, len); GlobalUnlock(hGlobal); IStream * pStream = NULL; if (CreateStreamOnHGlobal(hGlobal, TRUE, & pStream) == S_OK) { if ( FAILED( m_Image.Load(pStream)) ) { MessageBox(_T("调用图像文件失败!")); return; } pStream -> Release(); } GlobalFree(hGlobal); } void CJPEGTestView::OnDraw(CDC* pDC) { CJPEGTestDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!m_Image.IsNull()) { m_Image.Draw(pDC->m_hDC,0,0); } } 5.还可以添加放大缩小功能 在:CJPEGTestDoc类中添加: public: inline float GetZoomFactor() { return m_ZoomFactor; } protected: float m_ZoomFactor;//在构造函数中初始化1.00 BEGIN_MESSAGE_MAP(CJPEGTestDoc, CDocument) ON_COMMAND(AFX_ID_PREVIEW_ZOOMOUT, OnViewZoomout) ON_COMMAND(AFX_ID_PREVIEW_ZOOMIN, OnViewZoomin) END_MESSAGE_MAP() void CJPEGTestDoc::OnViewZoomout() { if (m_ZoomFactor<=0.0625) return; if (m_ZoomFactor == 2.00f) m_ZoomFactor = 1.50f; else if (m_ZoomFactor == 1.50f) m_ZoomFactor = 1.00f; else if (m_ZoomFactor == 1.00f) m_ZoomFactor = 0.75f; else if (m_ZoomFactor == 0.75f) m_ZoomFactor = 0.50f; else m_ZoomFactor/=2; CStatusBar& statusBar = ((CMainFrame *)(AfxGetApp()->m_pMainWnd))->GetStatusBar(); CString s; s.Format(_T("%4.1f %%"),m_ZoomFactor*100); statusBar.SetPaneText(2, s); UpdateAllViews(NULL,WM_USER_NEWIMAGE); } void CJPEGTestDoc::OnViewZoomin() { if (m_ZoomFactor>=16) return; if (m_ZoomFactor == 0.50f) m_ZoomFactor = 0.75f; else if (m_ZoomFactor == 0.75f) m_ZoomFactor = 1.00f; else if (m_ZoomFactor == 1.00f) m_ZoomFactor = 1.50f; else if (m_ZoomFactor == 1.50f) m_ZoomFactor = 2.00f; else m_ZoomFactor*=2; CStatusBar& statusBar = ((CMainFrame *)(AfxGetApp()->m_pMainWnd))->GetStatusBar(); CString s; s.Format(_T("%4.0f %%"),m_ZoomFactor*100); statusBar.SetPaneText(2, s); UpdateAllViews(NULL,WM_USER_NEWIMAGE); } 6.显示的时候,做相应的更改 void CJPEGTestView::OnDraw(CDC* pDC) { CJPEGTestDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!m_Image.IsNull()) { float zoom=pDoc->GetZoomFactor(); if (zoom==1) m_Image.Draw(pDC->m_hDC,0,0); else { pDC->SetStretchBltMode( HALFTONE ); //防止缩小图片失真 m_Image.Draw(pDC->GetSafeHdc(),CRect(0,0,(int)(m_Image.GetWidth()*zoom),(int)(m_Image.GetHeight()*zoom))); } } }
QZ_uitron 2014-01-25
  • 打赏
  • 举报
回复
应用CImage类用文件和流的方式显示图片

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧