显示JPEG和GIF格式的图片

 

BOOL CJPGGIFDlg::ShowJpgGif(CDC *  pDC,CString strPath,  int  x,  int  y)
{
 IStream 
*pStm;  

 CFileStatus fstatus;  

 CFile file;  

 LONG cb;  

 
//打开文件并检测文件的有效性

 
if (file.Open(strPath,CFile::modeRead)&&

  file.GetStatus(strPath,fstatus)
&& 

  ((cb 
= fstatus.m_size) != -1))  

 
{  

  HGLOBAL hGlobal 
= GlobalAlloc(GMEM_MOVEABLE, cb);  

  LPVOID pvData 
= NULL;  

  
if (hGlobal != NULL)  

  
{  

   pvData 
= GlobalLock(hGlobal);

   
if (pvData != NULL)  

   
{  

    file.Read(pvData, cb);  

    GlobalUnlock(hGlobal);  

    CreateStreamOnHGlobal(hGlobal, TRUE, 
&pStm);  

   }
 

  }
 

 }


 
else

 
{

  
return false;

 }
 //打开文件结束

 

 
//显示JPEG和GIF格式的图片,GIF只能显示一帧,还不能显示动画,

 
//要显示动画GIF请使用ACTIVE控//件。

 IPicture 
*pPic; 

 
//load image from file stream

 
if(SUCCEEDED(OleLoadPicture(pStm,fstatus.m_size,TRUE,IID_IPicture,(LPVOID*)&pPic))) 

 


  OLE_XSIZE_HIMETRIC hmWidth;  

  OLE_YSIZE_HIMETRIC hmHeight;  

  pPic
->get_Width(&hmWidth);  

  pPic
->get_Height(&hmHeight);  

  
double fX,fY;  

  
//get image height and width

  fX 
= (double)pDC->GetDeviceCaps(HORZRES)*(double)hmWidth/

   ((
double)pDC->GetDeviceCaps(HORZSIZE)*100.0);  

  fY 
= (double)pDC->GetDeviceCaps(VERTRES)*(double)hmHeight/

   ((
double)pDC->GetDeviceCaps(VERTSIZE)*100.0);  

  
//use render function display image

  
if(FAILED(pPic->Render(*pDC,x,y,(DWORD)fX,(DWORD)fY,0,

   hmHeight,hmWidth,
-hmHeight,NULL)))  

  
{

   pPic
->Release();

   
return false;

  }


  pPic
->Release();  

 }
  

 
else  

 
{

  
return false;  

 }


 
return true;


}


void  CJPGGIFDlg::OnBnClickedOk()
{
 
//将pStatic指向要显示的地方
 CDC* pDC = GetDlgItem(IDC_STATIC)->GetDC();
 CString sPath;

    sPath
=_T("1451566454896938430.jpg");

    ShowJpgGif(pDC,sPath,
0,0);

}


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
类图如下: ![image](https://user-images.githubusercontent.com/87290316/130308454-12aee8c3-3f3d-4a09-a1d3-8e2d1a9e7a47.png) 代码实现如下: ```java //抽象化角色:图片读取器 interface ImageReader { void readImage(String fileName); } //扩展抽象化角色:GIF图片读取器 class GifReader implements ImageReader { public void readImage(String fileName) { System.out.println("读取GIF格式图片:" + fileName); } } //扩展抽象化角色:JPEG图片读取器 class JpgReader implements ImageReader { public void readImage(String fileName) { System.out.println("读取JPEG格式图片:" + fileName); } } //实现化角色:操作系统 interface OS { void displayImage(ImageReader reader, String fileName); } //具体实现化角色:Windows操作系统 class Windows implements OS { public void displayImage(ImageReader reader, String fileName) { reader.readImage(fileName); System.out.println("在Windows操作系统中显示图片:" + fileName); } } //具体实现化角色:Android操作系统 class Android implements OS { public void displayImage(ImageReader reader, String fileName) { reader.readImage(fileName); System.out.println("在Android操作系统中显示图片:" + fileName); } } //具体实现化角色:Linux操作系统 class Linux implements OS { public void displayImage(ImageReader reader, String fileName) { reader.readImage(fileName); System.out.println("在Linux操作系统中显示图片:" + fileName); } } //客户端 public class Client { public static void main(String[] args) { OS windows = new Windows(); OS android = new Android(); OS linux = new Linux(); ImageReader gifReader = new GifReader(); ImageReader jpgReader = new JpgReader(); windows.displayImage(gifReader, "test.gif"); android.displayImage(gifReader, "test.gif"); linux.displayImage(gifReader, "test.gif"); windows.displayImage(jpgReader, "test.jpg"); android.displayImage(jpgReader, "test.jpg"); linux.displayImage(jpgReader, "test.jpg"); } } ``` 运行结果如下: ``` 读取GIF格式图片:test.gif 在Windows操作系统中显示图片:test.gif 读取GIF格式图片:test.gif 在Android操作系统中显示图片:test.gif 读取GIF格式图片:test.gif 在Linux操作系统中显示图片:test.gif 读取JPEG格式图片:test.jpg 在Windows操作系统中显示图片:test.jpg 读取JPEG格式图片:test.jpg 在Android操作系统中显示图片:test.jpg 读取JPEG格式图片:test.jpg 在Linux操作系统中显示图片:test.jpg ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值