VC++下载图片然后控件显示JPG图片的实现

本文介绍如何在VS2003开发平台中下载远程图片,并通过封装的函数将图片显示在指定的图片控件上。包括本地路径获取、远程图片下载、图片显示等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本人采用VS2003开发平台,由于可以兼容VC6.0的大量代码。但是要实现目前C#的大量功能,还是要费不少功夫的。下面讲下如何如下图片下载,然后显示在图片控件的功能。单独封装了两个函数可以只直接使用。

下载远程图片函数如下:


CString dir_name="";
   dir_name=ReturnPath();

    HRESULT hre = URLDownloadToFile(0, _T("http://172.28.125.74/auction/uploads/images/2014-03/1395916979-126367078.jpg"), _T(dir_name + "/1.jpg"), 0, NULL);

	

	if(SUCCEEDED(hre)){

    Sleep(1000);
    CDC *pDC = m_edit.GetDC();  
    ShowJpgGif(pDC, _T(dir_name + "/1.jpg"), 0, 0,(1024 / 2)-20, (768 / 2)-60);  
	
	}

本地路径获取代码:


CString CAuctionShadowDlg::ReturnPath()

{

    CString    sPath;

    GetModuleFileName(NULL, sPath.GetBufferSetLength(MAX_PATH + 1), MAX_PATH);

    sPath.ReleaseBuffer();

    int    nPos;

    nPos = sPath.ReverseFind('\\');

    sPath = sPath.Left(nPos);

    return    sPath;

}

图片显示到控件代码:


/**
CDC *pDC, 传入控件
CString strPath, 图片本地路径
int x, 控件摆放图片的起点坐标位置
int y,
int widthX,控件摆放图片的宽和高
int heigthY


*/

bool CAuctionShadowDlg::ShowJpgGif(CDC *pDC, CString strPath, int x, int y,int widthX,int heigthY)  
{  
    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(widthX>0&&fX>widthX){
		
			if(FAILED(pPic->Render(*pDC,x,y,widthX,heigthY,0,hmHeight,hmWidth,-hmHeight,NULL)))     
        {    
            pPic->Release();    
            return false;    
        }    

		}else{

        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;    
}  


类似网络爬虫,从一个网页“爬”到另一个网页,然后选择图片下载。多线程。 可以用来按照一定规则下载网页中的元素,如图片、网页、flash等,举例如下: 1. 下载sohu主页的所有图片 在地址栏中输入www.sohu.com,在“选项”中将最大下载图片数目设为0,最大访问网页数设为1,点开始即可。 2. 下载sohu主页及其子链接中的所有图片,共下载100张 在“选项”中将最大下载图片数目设为100,最大访问网页数设为0 3. 下载人人网中的相册 打开相册中的一张相片,如http://photo.renren.com/getphoto.do?id=975410152&owner=230410031&curpage=0&t=#975410152,将地址复制到软件的地址栏(注意要将窗口拉长,使得地址栏足够容下这个地址,否则地址会被切断,这个bug我一直没找到解决办法)。 接下来需要一点观察。先看要下载图片链接(http://fmn017.xnimg.cn/fmn017/pic001/20080926/17/21/large_wJZc_3213f200058.jpg),再看下一张,是http://fmn014.xnimg.cn/fmn014/pic001/20080926/17/21/large_Ao10_3208l200058.jpg,找到其中的公共部分,不妨取为xnimg.cn/fmn,将其输入“选项”中的“图片路径含有”,并勾选复选框。 再观察“上一张”、“下一张”的链接(http://photo.renren.com/getphoto.do?id=975410152&owner=230410031&curpage=0&t=#975409483)(http://photo.renren.com/getphoto.do?id=975410152&owner=230410031&curpage=0&t=#975410114),取其公共部分photo.renren.com/getphoto.do,填入“网页路径含有”并勾选复选框。 最后将最大下载图片数目和最大访问网页数都设为0,点开始即可。上面限制了图片和网页路径,只是为了防止下载不需要的图片。 4. 一次性在你的100个好友的页面上留下脚印 观察所有个人主页链接url,取出公共部分http://renren.com/profile.do,剩下的我就不用说了吧……对了,要是一张图片都不想下载,只要在“图片路径含有”中输入一个空格就可以了,因为任何图片url都不包含空格…… 5. 下载一部小说目录中的所有链接 提示:“选项”中有一个小小的“高级”按钮,有兴趣的同志可以研究一下…… ps. 大家可能看出来了,这个软件很类似网络爬虫,从一个网页“爬”到另一个网页,然后选择图片下载。如果有人需要根据关键词从大的图片搜索引擎下载图片,我推荐crazyPic这个软件。我这个软件的用途我暂时就想出这么多,欢迎发掘更多用途,也欢迎挑bug!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值