亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

MFC顯示網絡圖片_IPicture

2019-11-14 11:50:51
字體:
來源:轉載
供稿:網友

轉自:https://www.douban.com/note/181738144/

3. ipicture

IPicture的縮放效果好一點,有兩種方法:1)一種是直接顯示不下載圖片到本地,[cpp] view plain copy 在CODE上查看代碼片HRESULT CListListBox::ShowPic(CDC* pDC,CString strImgUrl,CRect rect)  {      HDC hDC_Temp = pDC->GetSafeHdc();      IPicture *pPic;      IStream *pStm;      HRESULT bResult;// = FALSE;      DWord dwFileSize,dwByteRead;        //讀取網頁上圖片文件,實際是個CHttpFile指針      CInternetsession session(L"HttpClient");      CFile* httpFile = (CFile*)session.OpenURL(strImgUrl);      if (httpFile!=INVALID_HANDLE_VALUE)      {          dwFileSize= httpFile->GetLength();//獲取文件字節數          if (dwFileSize==0xFFFFFFFF)              return E_FAIL;      }      else      {          return E_FAIL;      }        //分配全局存儲空間      HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwFileSize);      LPVOID pvData = NULL;      if (hGlobal == NULL)          return E_FAIL;      if ((pvData = GlobalLock(hGlobal)) == NULL)//鎖定分配內存塊          return E_FAIL;        //把文件讀入內存緩沖區      dwByteRead = httpFile->Read(pvData,dwFileSize);      GlobalUnlock(hGlobal);      CreateStreamOnHGlobal(hGlobal, TRUE, &pStm);                  //裝入圖形文件      bResult=OleLoadPicture(pStm,dwFileSize,TRUE,IID_IPicture,(LPVOID*)&pPic);      if(FAILED(bResult))          return E_FAIL;        OLE_XSIZE_HIMETRIC hmWidth; //圖片的真實寬度, 單位為英寸      OLE_YSIZE_HIMETRIC hmHeight; //圖片的真實高度, 單位為英寸      pPic->get_Width(&hmWidth);      pPic->get_Height(&hmHeight);                  //轉換hmWidth和hmHeight為pixels距離,1英寸=25.4毫米      int nWidth = MulDiv(hmWidth,GetDeviceCaps(hDC_Temp,LOGPIXELSX),2540);      int nHeight = MulDiv(hmHeight,GetDeviceCaps(hDC_Temp,LOGPIXELSY),2540);                //縮放圖片      int nWZoom = nWidth / rect.Width();      int nHZoom = nHeight / rect.Height();      int nZoom = 1;      nZoom = ( nWZoom > nHZoom ) ? nWZoom : nHZoom;      nWidth /= nZoom;      nHeight /= nZoom;      int midW = (rect.left + rect.right) / 2;      int midH = (rect.top + rect.bottom) / 2;      rect.left = midW - nWidth / 2;      rect.right = midW + nWidth / 2;      rect.top = midH - nHeight / 2;      rect.bottom = midH + nHeight / 2;                //將圖形輸出到屏幕上(有點像BitBlt)      bResult=pPic->Render(hDC_Temp,rect.left,rect.top,rect.Width(),rect.Height(),          0,hmHeight,hmWidth,-hmHeight,NULL);        pPic->Release();      httpFile->Close();//關閉打開的文件        if (SUCCEEDED(bResult))      {          return S_OK;      }      else      {          return E_FAIL;      }    }  2)%20一種是把圖片下載后保存本地再打開。[cpp] view%20plain copy HRESULT CListListBox::ShowPic(CDC* pDC,CString strImgUrl,CRect rect)  {      HDC hDC_Temp = pDC->GetSafeHdc();      HRESULT bResult;// = FALSE;      DWORD dwFileSize = 0,dwByteRead;      CString url = strImgUrl;      CString path = GetPic(strImgUrl);      //if(url.Find(L".jpeg") != -1) return E_FAIL;      if(path.IsEmpty())      {          url = SavePic(url);                  //return FALSE;      }      else      {          url = path;      }      CFile file;      if (!file.Open(url, CFile::modeRead|CFile::shareDenyWrite))      {          return FALSE;      }        CArchive ar(&file, CArchive::load | CArchive::bNoFlushOnDelete);      CArchiveStream arcstream(&ar);      IPicture *pPic;      IStream *pStm = (IStream*)&arcstream ;            //HRESULT hr = OleLoadPicture(pStm, 0, FALSE,IID_IPicture, (LPVOID*)&pPic);          //ASSERT(SUCCEEDED(hr) && m_spIPicture);        //bResult=OleLoadPicture(pStm,dwFileSize,TRUE,IID_IPicture,(LPVOID*)&pPic);      bResult=OleLoadPicture(pStm,0,FALSE,IID_IPicture,(LPVOID*)&pPic);      if(FAILED(bResult))          return E_FAIL;      OLE_XSIZE_HIMETRIC hmWidth; //圖片的真實寬度, 單位為英寸      OLE_YSIZE_HIMETRIC hmHeight; //圖片的真實高度, 單位為英寸      pPic->get_Width(&hmWidth);      pPic->get_Height(&hmHeight);        //轉換hmWidth和hmHeight為pixels距離,1英寸=25.4毫米      int nWidth = MulDiv(hmWidth,GetDeviceCaps(hDC_Temp,LOGPIXELSX),2540);      int nHeight = MulDiv(hmHeight,GetDeviceCaps(hDC_Temp,LOGPIXELSY),2540);        //縮放圖片      double nWZoom = nWidth / rect.Width();      double nHZoom = nHeight / rect.Height();      double nZoom = 1;      nZoom = ( nWZoom > nHZoom ) ? nWZoom : nHZoom;      nWidth /= nZoom;      nHeight /= nZoom;      int midW = (rect.left + rect.right) / 2;      int midH = (rect.top + rect.bottom) / 2;      CRect showRect(rect);      showRect.left = ((midW - nWidth / 2) < rect.left) ? rect.left : (midW - nWidth / 2);      showRect.right = ((midW + nWidth / 2) > rect.right) ? rect.right : (midW + nWidth / 2);      showRect.top = ((midH - nHeight / 2) < rect.top) ? rect.top : (midH - nHeight / 2);      showRect.bottom = ((midH + nHeight / 2) > rect.bottom) ? rect.bottom : (midH + nHeight / 2);      if(showRect.left < 0 || showRect.right < 0 || showRect.top < 0 || showRect.bottom < 0) return E_FAIL;      //將圖形輸出到屏幕上(有點像BitBlt)      bResult=pPic->Render(hDC_Temp,showRect.left,showRect.top,showRect.Width(),showRect.Height(),          0,hmHeight,hmWidth,-hmHeight,NULL);      pPic->Release();        file.Close();//關閉打開的文件      ar.Close();      arcstream.Release();      if (SUCCEEDED(bResult))      {          return S_OK;      }      else      {          return E_FAIL;      }    }  把網絡圖片下載到本地還有一個小插曲,開始我使用File Open的方式讀取網絡圖片,對于有些圖片是管用的。但是GetLength得到的值有時會很小,直接導致圖片下載不全,OleLoadPicture的時候程序直接卡死了。[cpp] view plain copy 在CODE上查看代碼片CString CListListBox::SavePic(CString strImgUrl)  {      //本地緩存路徑      if(path.IsEmpty())          return L"";      DWORD dwFileSize,dwByteRead;        //讀取網頁上圖片文件,實際是個CHttpFile指針      CInternetSession session(L"HttpClient");      CStdioFile* httpFile = session.OpenURL(strImgUrl);      if (httpFile!=INVALID_HANDLE_VALUE)      {          for(int i = 0; i < 100; i++)          {              dwFileSize = httpFile->GetLength();//獲取文件字節數          }          if (dwFileSize==0xFFFFFFFF)          {              DWORD err = GetLastError();              return L"";          }      }      else      {          return L"";      }        CFile file;      if(file.Open(path,CFile::modeCreate|CFile::modeWrite))      {          while(dwFileSize > 0)          {              BYTE* pvData = new BYTE[dwFileSize];//[100*1024*1024];              memset(pvData, 0, dwFileSize);              dwByteRead = httpFile->Read(pvData,dwFileSize);              file.Write(pvData,dwByteRead);              delete pvData;              dwFileSize -= dwByteRead;          }      }      file.Close();      httpFile->Close();      session.Close();      return path;  }  后來在網上搜了牛人寫的程序直接拿來用,居然很好用,速度也挺快[cpp] view%20plain copy 派生到我的代碼片CString CListListBox::SavePic(CString strImgUrl)  {      DWORD length=0;      BYTE buffer[1024];      memset(buffer,0,1024);      HINTERNET hInternet;        hInternet=InternetOpen(_T("Testing"),INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);      if (hInternet==NULL)      {          //cout<<_T("Internet open failed!")<<endl;          return L"";      }        HINTERNET hUrl;      hUrl=InternetOpenUrl(hInternet,strImgUrl,NULL,0,INTERNET_FLAG_RELOAD,0);      if (hUrl==NULL)      {          // cout<<_T("Internet open url failed!")<<endl;          InternetCloseHandle(hInternet);          return L"";      }        BOOL hwrite;      DWORD written;      HANDLE hFile;          CString path = CreateLocalPath(strImgUrl);          hFile=CreateFile(path,GENERIC_WRITE,0,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);      if (hFile==INVALID_HANDLE_VALUE)      {          //cout<<_T("Create File failed!")<<endl;          InternetCloseHandle(hUrl);          InternetCloseHandle(hInternet);          return L"";      }        BOOL read;      while(1)      {          read=InternetReadFile(hUrl,buffer,sizeof(buffer),&length);          if(length==0)              break;          hwrite=WriteFile(hFile,buffer,sizeof(buffer),&written,NULL);          if (hwrite==0)          {              //cout<<_T("Write to file failed!")<<endl;              CloseHandle(hFile);              InternetCloseHandle(hUrl);              InternetCloseHandle(hInternet);              return L"";          }      }      CloseHandle(hFile);      InternetCloseHandle(hUrl);      InternetCloseHandle(hInternet);      return path;  }  大功告成,由于開發時間匆忙,很多細節沒有追究,等以后有時間了再補上,這里做個記錄吧。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产欧美va欧美va香蕉在线| 久热在线中文字幕色999舞| 亚洲色图综合网| 欧美激情二区三区| 久久久久久久久中文字幕| 97成人超碰免| 成人在线小视频| 久久精品国产免费观看| 亚洲福利在线播放| 性色av一区二区三区红粉影视| 国产精品国产三级国产aⅴ9色| 97精品一区二区三区| 欧美亚洲免费电影| 亚洲精品电影网| 欧美国产亚洲精品久久久8v| 国产精品夜色7777狼人| 欧美在线国产精品| 欧美精品成人91久久久久久久| 欧美亚洲另类制服自拍| 91精品国产自产在线| 日本韩国欧美精品大片卡二| 亚洲japanese制服美女| 欧美日韩中文字幕在线| 亚洲国产小视频在线观看| 久久久久久91香蕉国产| 欧美在线影院在线视频| 国产精品久久9| 欧美自拍视频在线观看| 国产主播在线一区| 欧美一级黑人aaaaaaa做受| 高清欧美电影在线| 国产亚洲欧美日韩美女| 亚洲第一中文字幕在线观看| 亚洲人成网站在线播| 国产69精品久久久久99| 日韩在线观看免费网站| 欧美风情在线观看| 国产精品免费观看在线| 国产999精品| 欧美国产日韩一区二区在线观看| 欧美日产国产成人免费图片| 久久综合伊人77777| 亚洲精品福利免费在线观看| 亚洲福利在线视频| 欧美另类老女人| 国产综合香蕉五月婷在线| 狠狠躁夜夜躁久久躁别揉| 91经典在线视频| 欧美日韩国产123| 亚洲欧美中文另类| 欧美激情精品久久久久久变态| 伊人av综合网| www.日韩不卡电影av| 4k岛国日韩精品**专区| 国产精品第一视频| 人妖精品videosex性欧美| 亚洲xxxx18| 久久精品99无色码中文字幕| 97超视频免费观看| 日韩在线免费av| 欧美亚洲在线播放| 成人黄色免费看| 亚洲天堂男人的天堂| 欧美乱大交xxxxx另类电影| 9.1国产丝袜在线观看| 91亚洲人电影| 国产日韩精品入口| 日韩在线视频线视频免费网站| 亚洲国产精彩中文乱码av在线播放| 精品无人区乱码1区2区3区在线| 欧美电影免费观看高清完整| 九九热精品视频| 日韩av电影手机在线| 日韩欧美成人区| 国产日本欧美在线观看| 日韩视频免费看| 日韩av手机在线观看| 日本久久91av| 国产成人精品免费久久久久| 日韩a**站在线观看| 精品亚洲精品福利线在观看| 日本亚洲欧美三级| www.99久久热国产日韩欧美.com| 最新国产精品拍自在线播放| 日韩在线观看免费全集电视剧网站| 久久人人爽人人| 波霸ol色综合久久| 欧美第一淫aaasss性| 7m精品福利视频导航| 欧美小视频在线| 久久久亚洲精品视频| 亚洲第一福利视频| 91a在线视频| 一道本无吗dⅴd在线播放一区| 欧美日韩免费看| 久久99精品久久久久久青青91| 日韩精品极品在线观看播放免费视频| 成人av在线天堂| 国产精品成人av性教育| 欧美国产视频日韩| 亚洲欧美制服综合另类| 精品性高朝久久久久久久| 亚洲毛片在线观看.| 久久国产精品影视| 精品国产一区二区三区四区在线观看| 77777少妇光屁股久久一区| 姬川优奈aav一区二区| 91久久精品美女| 亚洲欧洲激情在线| 日韩欧美在线中文字幕| xxx欧美精品| 欧美激情综合色综合啪啪五月| 亚洲欧美三级在线| 清纯唯美日韩制服另类| 成人天堂噜噜噜| 97av在线视频免费播放| 欧美性猛交xxxx乱大交| 国产精品网站大全| 亚洲综合色av| 日韩精品中文字幕在线| 欧美国产视频一区二区| 国产精品视频网| 欧美日韩在线一区| 亚洲男人天堂网| 亚洲www在线观看| 欧美韩日一区二区| 91精品国产色综合久久不卡98| 久久97精品久久久久久久不卡| 久久精品2019中文字幕| 国产午夜精品一区二区三区| 欧美疯狂做受xxxx高潮| 国产精品久久久久不卡| 亚洲激情 国产| 久久久久久久999精品视频| 97国产suv精品一区二区62| 欧美在线免费观看| 国内精品小视频在线观看| 日韩极品精品视频免费观看| 国产精品免费小视频| 日韩av片永久免费网站| 热久久99这里有精品| 欧美亚洲日本网站| 国产国产精品人在线视| 国产成人精品一区二区三区| 亚洲美女精品成人在线视频| 久久激情五月丁香伊人| 91sao在线观看国产| 一区国产精品视频| 亚洲国产精品va在线观看黑人| 亚洲第一区在线观看| 日韩av电影手机在线| 日韩高清免费观看| 日本久久久久久久久| 国产精品白丝jk喷水视频一区| 亚洲男人的天堂网站| 久久久久久久久久久网站| 国产欧美日韩中文| 国产视频在线观看一区二区| 国产欧美韩国高清| 欧美—级a级欧美特级ar全黄| 成人福利免费观看| 久久精品国产亚洲| 欧美最猛性xxxxx亚洲精品| 日韩中文字幕久久|