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

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

MFC顯示網絡圖片_IPicture

2019-11-14 11:48:38
字體:
來源:轉載
供稿:網友

轉自: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
91精品国产一区| 91亚洲va在线va天堂va国| 中文日韩在线视频| 久久久久久久影院| 成人精品久久久| 亚洲男人天堂古典| 精品美女永久免费视频| 欧美尤物巨大精品爽| 日本成熟性欧美| 国产精品精品视频| 欧美在线视频导航| 精品夜色国产国偷在线| 一区二区三区四区精品| 欧美另类老肥妇| 国产欧美在线观看| 亚洲国产精品资源| 欧美一级高清免费播放| 成人黄色免费片| 欧美黑人性猛交| 久久露脸国产精品| 午夜精品国产精品大乳美女| 国产综合久久久久久| 国产香蕉一区二区三区在线视频| 欧美第一黄色网| 色樱桃影院亚洲精品影院| 午夜精品99久久免费| 国产精品日韩欧美| 精品福利樱桃av导航| 国产在线精品播放| 青青精品视频播放| 久久久亚洲欧洲日产国码aⅴ| 国产一区二区丝袜高跟鞋图片| 亚洲国内精品视频| 国产99久久精品一区二区| 亚洲毛茸茸少妇高潮呻吟| 色综合久久88色综合天天看泰| 中文字幕亚洲图片| 91九色精品视频| 久久综合伊人77777蜜臀| 91豆花精品一区| 日韩美女在线观看| 欧美日韩综合视频网址| 91av在线视频观看| 精品偷拍各种wc美女嘘嘘| 精品国产91乱高清在线观看| 国产日韩欧美黄色| 一区二区三区高清国产| 色无极影院亚洲| 欧美福利视频在线观看| 日韩中文有码在线视频| 欧美中文字幕视频在线观看| 日韩中文有码在线视频| 日韩大胆人体377p| 国产精品大片wwwwww| 国产精品自产拍高潮在线观看| 性夜试看影院91社区| 欧美多人乱p欧美4p久久| 欧美性xxxxx极品| 亚洲自拍偷拍色图| 一道本无吗dⅴd在线播放一区| 国产日韩欧美在线观看| 国产美女扒开尿口久久久| 亚洲区中文字幕| 久久久精品视频成人| 日韩一区在线视频| 亚洲国产婷婷香蕉久久久久久| 亚洲一区二区三区sesese| 精品毛片三在线观看| 久久青草精品视频免费观看| 国产欧美一区二区三区视频| xvideos亚洲| 欧美极品在线视频| 91香蕉嫩草影院入口| 亚洲精品狠狠操| 欧美日韩国产色| 91久久久久久久久久久| 欧美激情亚洲另类| 国产精品久久久久久亚洲调教| 欧美黄色免费网站| 亚洲国产成人久久综合一区| 国产精品69精品一区二区三区| 国产91精品久| 日本精品一区二区三区在线播放视频| 91在线网站视频| 亚洲老头同性xxxxx| 亚洲深夜福利视频| 久久综合88中文色鬼| 欧美在线观看一区二区三区| 国产精品久久久久久久久借妻| 亚洲最大成人网色| 欧美精品video| 免费99精品国产自在在线| 日本免费一区二区三区视频观看| 欧美性理论片在线观看片免费| 午夜免费久久久久| 91视频国产精品| 在线观看欧美www| 成人网欧美在线视频| 亚洲自拍高清视频网站| 欧美一级淫片videoshd| 亚洲成人激情图| 国产成人精品在线观看| 久久综合国产精品台湾中文娱乐网| 日韩欧美精品中文字幕| 亚洲精品丝袜日韩| 91视频国产精品| 夜夜嗨av色综合久久久综合网| 九九视频直播综合网| 亚洲男人天堂2019| 亚洲自拍偷拍色片视频| 91av视频在线| 97视频在线观看免费高清完整版在线观看| 丝袜亚洲另类欧美重口| 一区二区三区回区在观看免费视频| 亚洲天堂av综合网| 91香蕉电影院| 亚洲精品美女久久久久| 亚洲欧美日韩中文在线制服| 久久九九国产精品怡红院| 欧美最顶级的aⅴ艳星| 神马久久久久久| 国产精品久久久久久一区二区| 欧美中文在线观看国产| 欧美国产日本在线| 91精品国产综合久久男男| 日韩欧美国产免费播放| 国产精品一区久久| 777午夜精品福利在线观看| 精品自拍视频在线观看| 国产深夜精品福利| 亚洲一区美女视频在线观看免费| 一区二区欧美亚洲| 精品国偷自产在线视频99| 亚洲欧美日韩一区二区三区在线| 久久夜色撩人精品| 日韩中文字幕在线视频| 成人福利网站在线观看| 日韩精品在线私人| 青青久久av北条麻妃海外网| 国产精品嫩草视频| 久久久久久久久国产| 国产在线视频欧美| 国产日韩亚洲欧美| 欧美在线免费观看| 欧美中文字幕在线视频| 成人一区二区电影| 成人中文字幕在线观看| 亚洲性生活视频在线观看| 欧美激情精品久久久久久免费印度| 欧美日韩福利视频| 国产欧亚日韩视频| 亚洲激情视频在线| 国产成人精品综合久久久| 久久久伊人欧美| 国产精品视频一区二区三区四| 欧美日韩国产中文精品字幕自在自线| 日日摸夜夜添一区| 国产精品久久久久久久久久ktv| 亚洲免费成人av电影| 欧美激情日韩图片| 欧美日韩第一页| 日韩www在线| 日本sm极度另类视频| 97精品在线观看|