• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            MUILIB

            讓UI設(shè)計(jì)師的思想自由飛翔

               :: 首頁(yè) :: 新隨筆 ::  :: 聚合  :: 管理 ::
              33 隨筆 :: 0 文章 :: 39 評(píng)論 :: 0 Trackbacks
             1、IPicture接口對(duì)象的創(chuàng)建
                     方法1:直接通過(guò)文件創(chuàng)建
            LPCSTR szFileUrl;
             IPicture 
            *pIPicture;
             OleLoadPicturePath(CComBSTR(szFileUrl), 
               (LPUNKNOWN)NULL, 
               
            0
               
            0
               IID_IPicture,
               (LPVOID
            *)&pIPicture))
                    方法2:通過(guò)IStream來(lái)創(chuàng)建
             
            // 加載電子地圖
             LPCSTR szFileUrl;
             IStream 
            *pStream = NULL;
             IPicture 
            *pIPicture = NULL;;
             CFileStatus fstatus;
             CFile file;
             LONG lFileSize;
             HGLOBAL hGlobal;
             
            if(file.Open(szFileUrl, CFile::modeRead) && file.GetStatus(szFileUrl, fstatus) 
              
            && ((lFileSize = fstatus.m_size) != -1))
             {
              hGlobal 
            = GlobalAlloc(GMEM_MOVEABLE, lFileSize);// 開(kāi)辟大內(nèi)存
              if(hGlobal != NULL)
              {
               LPVOID pvData 
            = NULL;
               pvData 
            = GlobalLock(hGlobal);
               
            if(pvData != NULL)
               { 
                file.ReadHuge(pvData, lFileSize);   
            // 將圖片數(shù)據(jù)保存在內(nèi)存中
                GlobalUnlock(hGlobal);
                CreateStreamOnHGlobal(hGlobal, TRUE, 
            &m_pIStream);  // 創(chuàng)建流
                file.Close();
               }
               
            else
               {
                GlobalFree(hGlobal);
                
            return;
               }
              }
              
            else
              {
               file.Close();
               
            return;
              }
             }
             
            else
             {
              
            //打開(kāi)圖片失敗
              return;
             }
             OleLoadPicture(m_pIStream, fstatus.m_size, TRUE, IID_IPicture, (LPVOID
            *)&m_pIPicture);
             GlobalFree(hGlobal);

            2、通過(guò)IPicture來(lái)獲取圖片的尺寸
             OLE_XSIZE_HIMETRIC hmPicWidth;       
             OLE_YSIZE_HIMETRIC hmPicHeight;      
             pIPicture
            ->get_Width(&hmPicWidth);   // 獲取圖像寬度
             pIPicture->get_Height(&hmPicHeight); // 獲取圖像高度
             
            // 轉(zhuǎn)化單位為象素
             nPicWidth = MulDiv(hmPicWidth, GetDeviceCaps(GetDC()->m_hDC, LOGPIXELSX), HIMETRIC_PER_INCH);
             nPicHeight 
            = MulDiv(hmPicHeight, GetDeviceCaps(GetDC()->m_hDC, LOGPIXELSY), HIMETRIC_PER_INCH);


            3、通過(guò)IPicture來(lái)畫圖
            void ShowPicture(CDC *pDC)
            {
             OLE_XPOS_HIMETRIC xSrc;  
            // 圖片中當(dāng)前顯示區(qū)域的x
             OLE_YPOS_HIMETRIC ySrc;  // 圖片中當(dāng)前顯示區(qū)域的y
             OLE_XSIZE_HIMETRIC cxSrc; // 圖片中當(dāng)前顯示區(qū)域的寬度
             OLE_YSIZE_HIMETRIC cySrc; // 圖片中當(dāng)前顯示區(qū)域的高度
             m_pIPicture->Render(*pDC, 00, m_rcBox.Width(), m_rcBox.Height(), xSrc, ySrc, cxSrc, cySrc, NULL);
            }


            4、將IPicture中的圖片保存起來(lái)
            BOOL SaveToFileFromIPicture(LPCSTR szFileName, IPicture 
            *pPic)
            {
             
            // Create ILockBytes Buffer
             ILockBytes *plkbyt = NULL;
             CreateILockBytesOnHGlobal(NULL, TRUE, 
            &plkbyt);

             
            // Create IStorage
             IStorage   *pStorage = NULL;
             HRESULT hr 
            = ::StgCreateDocfileOnILockBytes(plkbyt,
              STGM_SHARE_EXCLUSIVE 
            | STGM_CREATE | STGM_READWRITE, 0&pStorage);
             
            if (FAILED(hr))
             {
              plkbyt
            ->Release();
              plkbyt 
            = NULL;
              
            return FALSE;
             }

             
            // Create IStream
             IStream    *pStream = NULL;
             hr 
            = pStorage->CreateStream(L"PICTURE",
              STGM_SHARE_EXCLUSIVE 
            | STGM_CREATE | STGM_READWRITE, 00&pStream);
             
            if (FAILED(hr))
             {
              pStorage
            ->Release();
              pStorage 
            = NULL;
              plkbyt
            ->Release();
              plkbyt 
            = NULL;
              
            return FALSE;
             }
             
             
            // Copy Data Stream
             long  lSize;
             hr 
            = pPic->SaveAsFile(pStream, TRUE, &lSize); 
             
            if (FAILED(hr))
             {
              pStream
            ->Release();
              pStream 
            = NULL;
              pStorage
            ->Release();
              pStorage 
            = NULL;
              plkbyt
            ->Release();
              plkbyt 
            = NULL;
              
            return FALSE;
             }
             
            // Get Statistics For Final Size Of Byte Array
             STATSTG  statStg;
             hr 
            = plkbyt->Stat(&statStg, STATFLAG_NONAME);
             
            if (FAILED(hr))
             {
              pStream
            ->Release();
              pStream 
            = NULL;
              pStorage
            ->Release();
              pStorage 
            = NULL;
              plkbyt
            ->Release();
              plkbyt 
            = NULL;
              
            return FALSE;
             }

             
            // calculate "Pure" Picture Data, Must Be In a 512 Blocks
             double  dbSkipFloat = (double(lSize) / 512);   
             DWORD  dwPicDataSize 
            = 0;
             
            if(dbSkipFloat > DWORD(dbSkipFloat)) 
             {
              dwPicDataSize 
            = (DWORD)dbSkipFloat + 1;
             }
             
            else 
             {
              dwPicDataSize 
            = (DWORD)dbSkipFloat;
             }
             dwPicDataSize 
            = dwPicDataSize * 512
             
            // Allocate Only The "Pure" Picture Data
             BYTE  *pPicDataBuffer = (BYTE*)malloc(dwPicDataSize);
             
            if (pPicDataBuffer == NULL)
             {
              pStream
            ->Release();
              pStream 
            = NULL;
              plkbyt
            ->Release();
              pStorage
            ->Release();
              pStorage 
            = NULL;
              plkbyt 
            = NULL;
              
            return FALSE;
             }
             
             
            // Read "Pure" Picture Data to Buffer
             _ULARGE_INTEGER ulOffset;
             ulOffset.LowPart 
            = 0;
             ulOffset.HighPart 
            = 0;
             ulOffset.QuadPart 
            = (DWORD)(statStg.cbSize.QuadPart - dwPicDataSize);
             DWORD dwRealDataSize;
             hr 
            = plkbyt->ReadAt(ulOffset, pPicDataBuffer, dwPicDataSize, &dwRealDataSize);
             
            if (FAILED(hr))
             {
              free(pPicDataBuffer);
              pPicDataBuffer 
            = NULL;
              pStream
            ->Release();
              pStream 
            = NULL;
              pStorage
            ->Release();
              pStorage 
            = NULL;
              plkbyt
            ->Release();
              plkbyt 
            = NULL;
              
            return FALSE;
             }
             
             
            // Save "Pure" Picture Data to file
             CFile  fBmp; 
             CFileException e;
             
            if (!fBmp.Open(szFileName, CFile::typeBinary | CFile::modeCreate | CFile::modeWrite, &e))
             {
              free(pPicDataBuffer);
              pPicDataBuffer 
            = NULL;
              pStream
            ->Release();
              pStream 
            = NULL;
              pStorage
            ->Release();
              pStorage 
            = NULL;
              plkbyt
            ->Release();
              plkbyt 
            = NULL;
              
            return FALSE;
             }
             fBmp.Write(pPicDataBuffer, dwRealDataSize);
             fBmp.Close();
             free(pPicDataBuffer);
             pPicDataBuffer 
            = NULL;
             pStream
            ->Release();
             pStream 
            = NULL;
             pStorage
            ->Release();
             pStorage 
            = NULL;
             plkbyt
            ->Release();
             plkbyt 
            = NULL;
             
            return TRUE;
            }


            5、將IPicture中圖片按規(guī)定的尺寸保存
            BOOL CIPictureDlg::Save2File(LPCSTR szFileName, IPicture 
            *pPic, int nWidth, int nHeight)
            {
             
            // create a new IPicture
             OLE_HANDLE hPic = NULL;
             
            if (FAILED(pPic->get_Handle(&hPic)))
             {
              
            return FALSE;
             }
             HBITMAP hBmp 
            = (HBITMAP)CopyImage((HANDLE)hPic,
               IMAGE_BITMAP, 
               nWidth, 
               nWidth, 
               LR_CREATEDIBSECTION);
             
            if (hBmp == NULL)
             {
              
            return FALSE;
             }
             PICTDESC picDesc;
             picDesc.cbSizeofstruct 
            = sizeof(PICTDESC);
             picDesc.picType 
            = PICTYPE_BITMAP;
             picDesc.bmp.hbitmap 
            = hBmp;

             IPicture 
            *pNewPic = NULL;
             
            if (SUCCEEDED(OleCreatePictureIndirect(&picDesc, IID_IPicture, FALSE, (LPVOID *)&pNewPic)))
             {
              
            // Save to file
              Save2File(szFileName, pNewPic);
              pNewPic
            ->Release();
              pNewPic 
            = NULL;
              DeleteObject(hBmp);
              hBmp 
            = NULL;
              
            return TRUE;
             }
             DeleteObject(hBmp);
             hBmp 
            = NULL;
             
            return FALSE;
            }
            posted on 2012-11-25 21:47 bukebushuo 閱讀(581) 評(píng)論(0)  編輯 收藏 引用

            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            国产精品久久久久一区二区三区 | 久久国产精品视频| 精品国产乱码久久久久软件 | 天天爽天天狠久久久综合麻豆| 久久久久人妻精品一区三寸蜜桃| 精品久久一区二区| 精品一区二区久久| 婷婷综合久久狠狠色99h| 狠狠干狠狠久久| 国产精品熟女福利久久AV| 久久996热精品xxxx| 精品国产乱码久久久久久浪潮| 国产精品成人99久久久久 | WWW婷婷AV久久久影片| 国产综合久久久久久鬼色| avtt天堂网久久精品| 国产精品免费久久久久电影网| 国产精品欧美亚洲韩国日本久久| 久久精品亚洲欧美日韩久久| 久久久久亚洲AV无码专区网站 | 国产精品对白刺激久久久| 国产一级持黄大片99久久| 2022年国产精品久久久久| 成人午夜精品久久久久久久小说| 久久精品无码免费不卡| 亚洲国产婷婷香蕉久久久久久| 国产成人久久精品一区二区三区| 久久久亚洲欧洲日产国码aⅴ| 日韩欧美亚洲综合久久影院d3| 久久久久亚洲AV无码去区首| 久久青青草原精品国产| 国产精品久久久久久久午夜片| 2019久久久高清456| 精品精品国产自在久久高清| 蜜臀久久99精品久久久久久| 97精品伊人久久大香线蕉app| 久久婷婷色综合一区二区| 久久精品国产亚洲精品2020| 四虎影视久久久免费| 伊人久久大香线蕉影院95| 亚洲精品无码久久久久AV麻豆|