1. 程式人生 > >MFC顯示網路圖片_IPicture

MFC顯示網路圖片_IPicture

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

3. IPicture

IPicture的縮放效果好一點,有兩種方法:
1)一種是直接顯示不下載圖片到本地,
  1. HRESULT CListListBox::ShowPic(CDC* pDC,CString strImgUrl,CRect rect)  
  2. {  
  3.     HDC hDC_Temp = pDC->GetSafeHdc();  
  4.     IPicture *pPic;  
  5.     IStream *pStm;  
  6.     HRESULT bResult;// = FALSE;
  7.     DWORD
     dwFileSize,dwByteRead;  
  8.     //讀取網頁上圖片檔案,實際是個CHttpFile指標
  9.     CInternetSession session(L"HttpClient");  
  10.     CFile* httpFile = (CFile*)session.OpenURL(strImgUrl);  
  11.     if (httpFile!=INVALID_HANDLE_VALUE)  
  12.     {  
  13.         dwFileSize= httpFile->GetLength();//獲取檔案位元組數
  14.         if (dwFileSize==0xFFFFFFFF)  
  15.             return E_FAIL;  
  16.     }  
  17.     else
  18.     {  
  19.         return E_FAIL;  
  20.     }  
  21.     //分配全域性儲存空間
  22.     HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwFileSize);  
  23.     LPVOID pvData = NULL;  
  24.     if (hGlobal == NULL)  
  25.         return E_FAIL;  
  26.     if ((pvData = GlobalLock(hGlobal)) == NULL)
    //鎖定分配記憶體塊
  27.         return E_FAIL;  
  28.     //把檔案讀入記憶體緩衝區
  29.     dwByteRead = httpFile->Read(pvData,dwFileSize);  
  30.     GlobalUnlock(hGlobal);  
  31.     CreateStreamOnHGlobal(hGlobal, TRUE, &pStm);  
  32.     //裝入圖形檔案
  33.     bResult=OleLoadPicture(pStm,dwFileSize,TRUE,IID_IPicture,(LPVOID*)&pPic);  
  34.     if(FAILED(bResult))  
  35.         return E_FAIL;  
  36.     OLE_XSIZE_HIMETRIC hmWidth; //圖片的真實寬度, 單位為英寸
  37.     OLE_YSIZE_HIMETRIC hmHeight; //圖片的真實高度, 單位為英寸
  38.     pPic->get_Width(&hmWidth);  
  39.     pPic->get_Height(&hmHeight);  
  40.     //轉換hmWidth和hmHeight為pixels距離,1英寸=25.4毫米
  41.     int nWidth = MulDiv(hmWidth,GetDeviceCaps(hDC_Temp,LOGPIXELSX),2540);  
  42.     int nHeight = MulDiv(hmHeight,GetDeviceCaps(hDC_Temp,LOGPIXELSY),2540);  
  43.    //縮放圖片
  44.     int nWZoom = nWidth / rect.Width();  
  45.     int nHZoom = nHeight / rect.Height();  
  46.     int nZoom = 1;  
  47.     nZoom = ( nWZoom > nHZoom ) ? nWZoom : nHZoom;  
  48.     nWidth /= nZoom;  
  49.     nHeight /= nZoom;  
  50.     int midW = (rect.left + rect.right) / 2;  
  51.     int midH = (rect.top + rect.bottom) / 2;  
  52.     rect.left = midW - nWidth / 2;  
  53.     rect.right = midW + nWidth / 2;  
  54.     rect.top = midH - nHeight / 2;  
  55.     rect.bottom = midH + nHeight / 2;  
  56.     //將圖形輸出到螢幕上(有點像BitBlt)
  57.     bResult=pPic->Render(hDC_Temp,rect.left,rect.top,rect.Width(),rect.Height(),  
  58.         0,hmHeight,hmWidth,-hmHeight,NULL);  
  59.     pPic->Release();  
  60.     httpFile->Close();//關閉開啟的檔案
  61.     if (SUCCEEDED(bResult))  
  62.     {  
  63.         return S_OK;  
  64.     }  
  65.     else
  66.     {  
  67.         return E_FAIL;  
  68.     }  
  69. }  


2) 一種是把圖片下載後儲存本地再開啟。
  1. HRESULT CListListBox::ShowPic(CDC* pDC,CString strImgUrl,CRect rect)  
  2. {  
  3.     HDC hDC_Temp = pDC->GetSafeHdc();  
  4.     HRESULT bResult;// = FALSE;
  5.     DWORD dwFileSize = 0,dwByteRead;  
  6.     CString url = strImgUrl;  
  7.     CString path = GetPic(strImgUrl);  
  8.     //if(url.Find(L".jpeg") != -1) return E_FAIL;
  9.     if(path.IsEmpty())  
  10.     {  
  11.         url = SavePic(url);  
  12.                 //return FALSE;
  13.     }  
  14.     else
  15.     {  
  16.         url = path;  
  17.     }  
  18.     CFile file;  
  19.     if (!file.Open(url, CFile::modeRead|CFile::shareDenyWrite))  
  20.     {  
  21.         return FALSE;  
  22.     }  
  23.     CArchive ar(&file, CArchive::load | CArchive::bNoFlushOnDelete);  
  24.     CArchiveStream arcstream(&ar);  
  25.     IPicture *pPic;  
  26.     IStream *pStm = (IStream*)&arcstream ;  
  27.         //HRESULT hr = OleLoadPicture(pStm, 0, FALSE,IID_IPicture, (LPVOID*)&pPic);
  28.         //ASSERT(SUCCEEDED(hr) && m_spIPicture);
  29.     //bResult=OleLoadPicture(pStm,dwFileSize,TRUE,IID_IPicture,(LPVOID*)&pPic);
  30.     bResult=OleLoadPicture(pStm,0,FALSE,IID_IPicture,(LPVOID*)&pPic);  
  31.     if(FAILED(bResult))  
  32.         return E_FAIL;  
  33.     OLE_XSIZE_HIMETRIC hmWidth; //圖片的真實寬度, 單位為英寸
  34.     OLE_YSIZE_HIMETRIC hmHeight; //圖片的真實高度, 單位為英寸
  35.     pPic->get_Width(&hmWidth);  
  36.     pPic->get_Height(&hmHeight);  
  37.     //轉換hmWidth和hmHeight為pixels距離,1英寸=25.4毫米
  38.     int nWidth = MulDiv(hmWidth,GetDeviceCaps(hDC_Temp,LOGPIXELSX),2540);  
  39.     int nHeight = MulDiv(hmHeight,GetDeviceCaps(hDC_Temp,LOGPIXELSY),2540);  
  40.     //縮放圖片
  41.     double nWZoom = nWidth / rect.Width();  
  42.     double nHZoom = nHeight / rect.Height();  
  43.     double nZoom = 1;  
  44.     nZoom = ( nWZoom > nHZoom ) ? nWZoom : nHZoom;  
  45.     nWidth /= nZoom;  
  46. 相關推薦

    MFC顯示網路圖片_IPicture

    轉自:https://www.douban.com/note/181738144/ 3. IPicture IPicture的縮放效果好一點,有兩種方法: 1)一種是直接顯示不下載圖片到本地, HRESULT CListListBox::ShowP

    Android中使用ImageView控制元件顯示網路圖片

    在android4.0以後的版本中,為了使得主介面流暢,所以設定了不允許在主執行緒中訪問網路,為了安全,又不允許在其它執行緒中訪問控制元件,這樣就造成了ImageView等需要使用網路的控制元件更新時的問題,本文以Handler+Runnable的方式實現了ImageView控制元件顯示網路圖片.

    MFC顯示JPG圖片

    分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

    微信小程式分享到朋友圈-遇到的問題drawImage真機不顯示網路圖片

    網上有現成的例子,所以直接拿來用了,見連結,接下來說下自己遇到的問題       ->   因為在我的專案中,我的圖片是網路圖片,canvas上繪製的目前只支援本地圖片,那應該怎麼辦呢?不可能圖片是固定死的,所以只能另尋捷徑了,前端開發

    VGA系列之一:VGA顯示網路圖片

    一休哥是在讀研究生的時候開始正式接觸FPGA的,之所以這麼說呢,是因為之前本科參加電賽的時候也學過一點FPGA的知識,可惜學習週期太短導致那次電賽慘敗。可能世上就是有這麼巧的事,剛上研究生的第一天,老闆就給了我一塊FPGA板,讓我自己玩去,從此就踏上了這條不歸路

    android中Picasso顯示網路圖片

    使用之前匯入jar包(picasso.jar網上搜搜都有)或者在android studio中新增依賴compile 'com.squareup.picasso:picasso:2.5.2' 使用方式

    【iOS開發】UIWebView載入html時不顯示網路圖片解決辦法

    NSString *html = @"<html><body><p>怎麼顯示網路圖片 <img src=\"http://p0.ifengimg.com/pmop/2017/1218/F9636BB16CC72EC34B5FCB78

    iOS UIImageView顯示網路圖片的基礎用法

    先解釋下以下程式碼中的變數: picsURL是一個儲存URL地址的陣列 choice是選擇圖片的索引數 self.imageView是View中的UIImageView 其實顯示一幅網路上的圖片十分簡單,如下2行程式碼即可。 UIImage *image=[UIImage

    微信小程式使用canvas在真機上不顯示使用者頭像問題(不顯示網路圖片

    如果要做一個分享朋友圈,而需要通過canvas繪製圖片,在真機上是不顯示你的使用者頭像的,但是開發者工具和真機上開啟除錯是可以看的。這就需要在微信公眾平臺把你頭像前面的網址配置到downloadFile網址裡去 比如下面的頭像,就需要把https://wx.qlogo.cn

    Android基礎篇之在ListView中顯示網路圖片

    http://blog.csdn.net/y13872888163/article/details/6434001 最近在做一個天氣預報的例子,想在ListView中新增網路圖片,在翻閱很多文件,在Baidu上Google很久,終於找到了辦法,現在跟大家分享一下解決方

    iOS 開發中如何顯示網路圖片

                  by Fanxiushu  2015-07-10 轉載或引用請註明原作者  iOS開發中,使用UIImageView控制元件來顯示圖片,非常簡單幾句話就能顯示一個完整的圖片:UIImageView* img =[[UIImageView allo

    Unity載入網路圖片顯示在UGUI上,解決載入網路圖片出現問號的問題及其案例分析,例項Demo親測可用

    Unity載入網路圖片並顯示在UGUI上,解決載入網路圖片出現問號的問題及其案例分析,例項Demo親測可用 最近自己在載入網路圖片的時候也遇到了載入的圖片無法顯示或者是問號的問題。下面就分析下為什麼會出現這樣的情況。   首先我們直接上程式碼(比較簡單) using U

    MFC 顯示圖片

    //定義成員變數 CStatic m_picture; m_picture.Create(L"XXX",WS_VISIBLE|WS_CHILD|SS_BITMAP ,CRect(0,0,100,100),this,1000); HBITMAP hBmp = LoadBitmap(A

    高德地圖自定義 marker 佈局里加載網路圖片顯示的問題

    服務端返回一組 marker 陣列,for 迴圈裡新增自定義佈局 marker到地圖上 要注意兩個原因不顯示 marker 1,要在圖片載入完後再把 佈局view新增到 marker 上 2,markerOption必須是 for 迴圈裡的變數,不能是全域性變數,不然

    小程式canvas使用網路圖片真機不顯示解決方案----可直接使用案例測試

    圖片都是線上的,可以直接放到onLoad裡邊自動檢測 1.注意點:  在繪製網路圖片時必需先將其儲存到本地然後在繪製。當我們在載入一個帶有圖片的頁面時,圖片都會被暫存到本地,由此我們可以通過wx.ge

    android-Picasso請求https載入網路圖片不能顯示的解決方案

    Picasso載入https的圖片載入不出來的解決方案 最近專案中有需求–要顯示https連結的圖片,但是配置好路徑後原生的Picasso死活沒法加載出圖片,最後在網上找到了如下的解決辦法 確認依賴 compile 'com.squareup.ok

    MFC 對話方塊Picture Control(圖片控制元件)中靜態和動態顯示Bmp圖片

            最近有同學問我如何實現MFC基於對話方塊在圖片控制元件中載入圖片?其實使用MFC顯示圖片的方法各種各樣,但是還是有些同學不知道怎樣顯示.以前在《數字影象處理》課程中完成的軟體都是基於單

    VS2013和MFC顯示圖片

    opencv_calib3d249d.lib opencv_contrib249d.lib opencv_core249d.lib opencv_features2d249d.lib opencv_flann249d.lib opencv_gpu249d.lib opencv_highgui249d.lib

    MFC實現picture控制元件顯示jpg圖片檔案

    void CMFC_display_opencvDlg::OnBnClickedOk() { // TODO: 在此新增控制元件通知處理程式程式碼 //CDialogEx::OnOK()

    img標籤src引用網路圖片,頁面不顯示,返回403錯誤,網路圖片地址在瀏覽器能載入,放html卻不能顯示

    在html頁面加入<meta name="referrer" content="no-referrer">標籤,就可以解決頁面載入網路圖片的問題,原因大概是網路安全的問題,別人的頁面做了安全防護的問題。<head> <meta chars