QQ登录

只需一步,快速开始

122上位机VC MFC打开显示JPG格式图片

[ 复制链接 ]

122上位机VC MFC打开显示JPG格式图片

122上位机VC MFC打开显示JPG格式图片
122上位机VC MFC打开显示JPG格式图片
功能展示
我们在使用VC编辑时,发现它并没有控件可以对JPG图片进行直接打开显示操作,我们得自己动手编程实现,我们当前例程就实现打开JPG图片及显示的功能,效果如图 ;
要点提示
JPG图片的操作可以通过Ipicture 图像对象进行操作;
1.首先定义一个文件类对象CFile file读取JPG文件的数据长度DWORD filelen = file.GetLength();
2.然后现分配数据长度的内存空间HGLOBAL hglobal =GlobalAlloc(GMEM_MOVEABLE,filelen);
把数据读取到内存空间  file.ReadHuge(pvdata,filelen);//将文件数据读区到堆中
3.然后就可以实现JGP图像加载到 Ipicture  对象中进行显示等操作
   IStream* stream;
   CreateStreamOnHGlobal(hglobal,TRUE,&stream);//在堆中创建流对象
   OleLoadPicture(stream,filelen,TRUE,IID_IPicture,(LPVOID*)&m_pPicture);//利用流加载图像
实现功能
1.新建基于对话框的应用程序
2.添加一变量  IPicture*m_pPicture;用于保存打开的JPG图片;OnInitDialog()函数中初始化 m_pPicture = NULL;GetSystemMenu(FALSE)->InsertMenu(IDM_ABOUTBOX,MF_BYCOMMAND|MF_STRING,999,"加载图片");
3.在OnSysCommand()中实现图片加载功能 else if(nID == 999) { LoadPic(); } LoadPic()为自定义加载JGP图片的函数
  1. void CGkbc8Dlg::LoadPic()
  2. {
  3.         CFileDialog m_dlg(TRUE,"JPG",NULL,NULL,"JPG(*.jpg)|*.JPG|gif|*.gif",this);
  4.         if (m_dlg.DoModal()==IDOK)
  5.         {
  6.                 CString filename =m_dlg.GetPathName();
  7.                 CFile file(filename,CFile::modeRead );
  8.                 DWORD filelen = file.GetLength(); //获取文件长度
  9. //><在堆上分配空间
  10.                 HGLOBAL hglobal = GlobalAlloc(GMEM_MOVEABLE,filelen);
  11.                 LPVOID pvdata = NULL;
  12.                 pvdata = GlobalLock(hglobal);//锁定堆空间,获取指向堆空间的指针
  13.                 file.ReadHuge(pvdata,filelen);//将文件数据读区到堆中
  14.                 GlobalUnlock(hglobal);
  15. //><
  16.                 IStream*  stream;
  17.                 CreateStreamOnHGlobal(hglobal,TRUE,&stream);//在堆中创建流对象
  18.                 OleLoadPicture(stream,filelen,TRUE,IID_IPicture,(LPVOID*)&m_pPicture);//利用流加载图像
  19.         
复制代码
  1. OLE_XSIZE_HIMETRIC width;
  2.             OLE_YSIZE_HIMETRIC height;
  3.                 m_pPicture->get_Width(&width);
  4.                 m_pPicture->get_Height(&height);        
  5.                 CDC *pDC =GetDC();
  6.                 //转换himetric距离为pixels距离,1英寸=25.4毫米
  7.                 int nWidth = MulDiv(width, GetDeviceCaps(pDC->m_hDC, LOGPIXELSX), 2540);
  8.                 int nHeight = MulDiv(height, GetDeviceCaps(pDC->m_hDC, LOGPIXELSY), 2540);
  9.                 m_pPicture->Render(pDC->m_hDC,0,0,nWidth,nHeight,0,height,width,-height,NULL);
  10.         //
  11.                 ReleaseDC(pDC);
  12.                 GlobalFree(hglobal);
  13.         //
  14.                 CRect rect;
  15.                 GetClientRect(rect);
  16.                 SetScrollRange(SB_VERT,0,nWidth-rect.Height());
  17.                 SetScrollRange(SB_HORZ,0,nHeight-rect.Width());
  18.         }               
  19. }
复制代码
当然你也可以在OnPaint()函数中实现窗口刷新时,图片的显示
  1. if(NULL!=m_pPicture)
  2.         {
  3.                 OLE_XSIZE_HIMETRIC width;
  4.             OLE_YSIZE_HIMETRIC height;
  5.                 m_pPicture->get_Width(&width);
  6.                 m_pPicture->get_Height(&height);        
  7.                 CDC *pDC =GetDC();
  8.                 //转换himetric距离为pixels距离,1英寸=25.4毫米
  9.                 int nWidth = MulDiv(width, GetDeviceCaps(pDC->m_hDC, LOGPIXELSX), 2540);
  10.                 int nHeight = MulDiv(height, GetDeviceCaps(pDC->m_hDC, LOGPIXELSY), 2540);
  11.                 m_pPicture->Render(pDC->m_hDC,0,0,nWidth,nHeight,0,height,width,-height,NULL);
  12.         }
复制代码
我们来演示下功能实现的整个过程
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:122.上位机VC MFC打开显示JPG格式图片.rar 
文件大小:186.18 KB  售价:10金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我

  

您的支持是我们创作的动力!  

  

您可花点闲钱积分自助任意充值

  

成为VIP会员 全站资源任意下载永久更新!


回复

使用道具 举报

点击查看
快速回复 返回列表 客服中心 搜索