如何在MFC窗口显示BMP和JPG图片

  1. //通过资源画图    
  2.   static   void   DrawBitmap(UINT   bitmap,CDC   *pDC,CRect   rect)    
  3.   {    
  4.       CBitmap   bmp;    
  5.       if   (bmp.LoadBitmap(bitmap))    
  6.       {    
  7.       BITMAP   bmpInfo;    
  8.               bmp.GetBitmap(&bmpInfo);    
  9.               CDC   dcMemory;    
  10.               dcMemory.CreateCompatibleDC(pDC);    
  11.               dcMemory.SelectObject(&bmp);    
  12.       pDC->SetStretchBltMode(HALFTONE);    
  13.       pDC->StretchBlt(rect.left,rect.top,rect.Width(),rect.Height(),&dcMemory,0,0,bmpInfo.bmWidth,bmpInfo.bmHeight,SRCCOPY);    
  14.       }    
  15.   }    
  16.      
  17.   //通过BMP文件画图    
  18.   static   void   drawBitmapFormFile(CString   BitmapFilePath,CDC   *pDC,CRect   rect)    
  19.   {    
  20.   HANDLE   filehandle=::LoadImage(NULL,BitmapFilePath,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);    
  21.   if(filehandle!=NULL)    
  22.   {    
  23.   CBitmap   bmp;    
  24.   if(bmp.Attach(filehandle))    
  25.   {    
  26.                             BITMAP   bmpInfo;    
  27.                             bmp.GetBitmap(&bmpInfo);    
  28.                             CDC   dcMemory;    
  29.                             dcMemory.CreateCompatibleDC(pDC);    
  30.                             dcMemory.SelectObject(&bmp);    
  31.                             pDC->SetStretchBltMode(HALFTONE);    
  32.                             pDC->StretchBlt(rect.left,rect.top,rect.Width(),rect.Height(),&dcMemory,0,0,bmpInfo.bmWidth,bmpInfo.bmHeight,SRCCOPY);    
  33.     bmp.Detach();    
  34.   }    
  35.   }    
  36.   }  
  1. BOOL CShowBitmapView::ShowJpgGif(CDC* pDC,CString strPath, int x, int y)//读取文件信息方式打开JPG等图片文件  
  2. {  
  3.     IStream *pStm;    
  4.     CFileStatus fstatus;    
  5.     CFile file;    
  6.     LONG cb;    
  7.     //打开文件并检测文件的有效性  
  8.     if (file.Open(strPath,CFile::modeRead)&&  
  9.         file.GetStatus(strPath,fstatus)&&   
  10.         ((cb = fstatus.m_size) != -1))    
  11.     {    
  12.         HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, cb);    
  13.         LPVOID pvData = NULL;    
  14.         if (hGlobal != NULL)    
  15.         {    
  16.             pvData = GlobalLock(hGlobal);  
  17.             if (pvData != NULL)    
  18.             {    
  19.                 //file.ReadHuge(pvData, cb);  //6.0中可能是用这个函数  
  20.                 file.Read(pvData, cb);  //VC2005.NET中用这个函数  
  21.                 GlobalUnlock(hGlobal);    
  22.                 CreateStreamOnHGlobal(hGlobal, TRUE, &pStm);    
  23.             }   
  24.         }   
  25.     }  
  26.     else  
  27.     {  
  28.         return false;  
  29.     } //打开文件结束  
  30.     //显示JPEG和GIF格式的图片,GIF只能显示一帧,还不能显示动画,  
  31.     //要显示动画GIF请使用ACTIVE控件。  
  32.     IPicture *pPic;   
  33.     //load image from file stream  
  34.     if(SUCCEEDED(OleLoadPicture(pStm,fstatus.m_size,TRUE,IID_IPicture,(LPVOID*)&pPic)))   
  35.     {   
  36.         OLE_XSIZE_HIMETRIC hmWidth;    
  37.         OLE_YSIZE_HIMETRIC hmHeight;    
  38.         pPic->get_Width(&hmWidth);    
  39.         pPic->get_Height(&hmHeight);    
  40.         double fX,fY;    
  41.         //get image height and width  
  42.         fX = (double)pDC->GetDeviceCaps(HORZRES)*(double)hmWidth/((double)pDC->GetDeviceCaps(HORZSIZE)*100.0);    
  43.         fY = (double)pDC->GetDeviceCaps(VERTRES)*(double)hmHeight/((double)pDC->GetDeviceCaps(VERTSIZE)*100.0);    
  44.         //use render function display image  
  45.         if(FAILED(pPic->Render(*pDC,x,y,(DWORD)fX,(DWORD)fY,0,hmHeight,hmWidth,-hmHeight,NULL)))    
  46.         {  
  47.             pPic->Release();  
  48.             return false;  
  49.         }  
  50.         pPic->Release();    
  51.     }    
  52.     else    
  53.     {  
  54.         return false;    
  55.     }  
  56.     return true;  


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 MFC显示 jpg 图片可以通过以下步骤实现: 首先,需要在 MFC 应用程序中添加一个 Picture Control 控件,用于显示图片。 接下来,需要导入相关的头文件,包括 "afx.h" 和 "afxwin.h"。 然后,在应用程序的消息映射中,添加一个响应 Picture Control 控件更新消息的处理函数。 在该处理函数中,可以使用 MFC 提供的 CImage 类来加载和显示 jpg 图片。可以使用 CImage 的 Load() 函数加载指定路径的 jpg 图片。例如,可以使用类似下面的代码加载图片: CImage image; image.Load(_T("路径/图片名.jpg")); 然后,可以使用 Picture Control 控件的 SetBitmap() 函数将加载的图片设置为要显示的位图。例如,可以使用下面的代码将图片设置为 Picture Control 控件的位图: m_pictureControl.SetBitmap(image.Detach()); 最后,应该确保在程序退出时,释放图片资源,可以在析构函数或销毁 Picture Control 控件的处理函数中调用 CImage 的 Destroy() 函数释放图片资源: image.Destroy(); 通过以上步骤,就可以在 MFC 应用程序中成功显示 jpg 图片了。 ### 回答2: 在MFC显示JPG图片需要使用GDI+库。 首先,需要添加GDI+的头文件和库文件: ``` #include <gdiplus.h> #pragma comment(lib,"gdiplus.lib") using namespace Gdiplus; ``` 然后,在MFC窗口类中重写OnPaint函数用于绘制图片: ``` void CYourWndClass::OnPaint() { CPaintDC dc(this); GdiplusStartupInput gdiplusStartupInput; ULONG_PTR gdiplusToken; GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); Graphics graphics(dc.GetSafeHdc()); Image image(L"your_image.jpg"); // 替换为图片路径和名称 graphics.DrawImage(&image, 0, 0, image.GetWidth(), image.GetHeight()); GdiplusShutdown(gdiplusToken); } ``` 上述代码中,使用`Image`类加载JPG图片,并使用`Graphics`类的`DrawImage`函数将图片绘制到窗口上。 最后,在窗口的初始化函数(如OnInitDialog)中调用Invalidate函数来触发窗口的重绘: ``` BOOL CYourWndClass::OnInitDialog() { CDialog::OnInitDialog(); Invalidate(); return TRUE; } ``` 以上就是使用MFC显示JPG图片的基本步骤。如果想要在其他控件中显示图片,可以在对应的控件绘制函数中使用相同的方法来绘制图片。 ### 回答3: 在MFC中,我们可以使用CImage类来显示jpg图片。 首先,需要在程序中引入相关的头文件和库,包括atlimage.h和comdef.h。 然后,我们可以创建一个CImage对象,并调用其Load函数加载jpg图片文件。例如,假设我们有一个名为image.jpgjpg图片文件,可以使用以下代码加载该图片: CImage image; image.Load(_T("image.jpg")); 接下来,我们需要将CImage对象中的图片绘制到显示窗口上。可以使用CDC类的相关函数来实现绘制操作。 首先,需要获取显示窗口的CDC对象。一种常见的方法是在窗口类中重写OnPaint函数,然后在该函数中获取CDC对象。例如: void CMyWindow::OnPaint() { CPaintDC dc(this); // 获取窗口的DC对象 // 在这里进行绘制操作 } 然后,在获取到CDC对象后,可以使用CDC的相关函数来绘制CImage对象中的图片。例如,可以使用CDC的BitBlt函数来实现简单的绘制操作。以下是一个示例代码: void CMyWindow::OnPaint() { CPaintDC dc(this); // 获取窗口的DC对象 // 绘制CImage对象中的图片 int width = image.GetWidth(); int height = image.GetHeight(); image.BitBlt(dc.GetSafeHdc(), 0, 0, width, height, 0, 0, SRCCOPY); } 在上述示例代码中,我们首先获取了CImage对象的宽度和高度,并使用CDC的BitBlt函数将CImage对象中的图片绘制到窗口的DC对象上。 以上是一种简单的在MFC显示jpg图片的方法。当然,还有其他多种方式可以实现此功能,具体的方法可以根据实际需求进行选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值