• <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>

            Benjamin

            靜以修身,儉以養(yǎng)德,非澹薄無(wú)以明志,非寧?kù)o無(wú)以致遠(yuǎn)。
            隨筆 - 397, 文章 - 0, 評(píng)論 - 196, 引用 - 0
            數(shù)據(jù)加載中……

            vc加載jpg圖片的方法

            MFC提供的CWnd只有默認(rèn)加載BMP文件的接口,對(duì)JPG等圖像是不支持的,而實(shí)際中經(jīng)常需要用到非BMP的圖片,在VC中加載.JPG格式的圖片,有兩種方法,用流對(duì)象加載和用IPicture接口加載。

            IPicture *m_picture;
            OLE_XSIZE_HIMETRIC m_width;
            OLE_YSIZE_HIMETRIC m_height;

            CString m_filename(
            "D:\\009.jpg");//文件名

            CFile m_file(m_filename,CFile::modeRead );

            //獲取文件長(zhǎng)度
            DWORD m_filelen 
            = m_file.GetLength(); 

            //在堆上分配空間
            HGLOBAL m_hglobal 
            = GlobalAlloc(GMEM_MOVEABLE,m_filelen);

            LPVOID pvdata 
            = NULL;
            //鎖定堆空間,獲取指向堆空間的指針
            pvdata 
            = GlobalLock(m_hglobal);

            //將文件數(shù)據(jù)讀區(qū)到堆中
            m_file.ReadHuge(pvdata,m_filelen);

            IStream
            *  m_stream;

            GlobalUnlock(m_hglobal);

            //在堆中創(chuàng)建流對(duì)象
            CreateStreamOnHGlobal(m_hglobal,
            TRUE,&m_stream);

            //利用流加載圖像
            OleLoadPicture(m_stream,m_filelen,
            TRUE,IID_IPicture,(LPVOID*)&m_picture);

            m_picture
            ->get_Width(&m_width);
            m_picture
            ->get_Height(&m_height);    

            CDC
            * dc = GetDC();

            m_IsShow 
            = TRUE;
            CRect rect;
            GetClientRect(rect);
            SetScrollRange(SB_VERT,
            0,(int)(m_height/26.45)-rect.Height());
            SetScrollRange(SB_HORZ,
            0,(int)(m_width/26.45)-rect.Width());

            m_picture
            ->Render(*dc,1,50,(int)(m_width/26.45),(int)(m_height/26.45),0,m_height,m_width,-m_height,NULL);

            以上代碼是用創(chuàng)建流文件的方式加載,也可以加載.gif圖片,但不能顯示動(dòng)畫(huà)效果。
            下面的代碼則是用IPicture接口的方式來(lái)加載jpg圖片(全屏顯示圖片)。
            注意:這兩段代碼不能用在wince平臺(tái)上,在wince上加載有另外的函數(shù)。
                CString szFileName;
                szFileName.Empty();
                szFileName 
            = "D:\\84.jpg";
                
                IStream 
            *pStm;
                CFileStatus fstatus;
                CFile file;
                
            LONG cb;
                
                
            if (file.Open(szFileName,CFile::modeRead) && file.GetStatus(szFileName,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.ReadHuge(pvData,cb);
                            GlobalUnlock(hGlobal);
                            CreateStreamOnHGlobal(hGlobal,
            TRUE,&pStm);
                        }
                    }   
                }
                
                
                
            // HRESULT Render( HDC hdc, //渲染圖像用的設(shè)備環(huán)境句柄
                
            // long x, //在hdc上的水平坐標(biāo)
                
            // long y, //在hdc上的垂直坐標(biāo)
                
            // long cx, //圖像寬度
                
            // long cy, //圖像高度
                
            // OLE_XPOS_HIMETRIC xSrc, //在源圖像上的水平偏移
                
            // OLE_YPOS_HIMETRIC ySrc, //在源圖像上的垂直偏移
                
            // OLE_XSIZE_HIMETRIC cxSrc,//在源圖像上水平拷貝的數(shù)量
                
            // OLE_YSIZE_HIMETRIC cySrc,//在源圖像上垂直拷貝的數(shù)量
                
            // LPCRECT prcWBounds //指向目標(biāo)圖元設(shè)備環(huán)境句柄的指針);
                CComQIPtr
            <IPicture> m_picture;
                HRESULT hr 
            = OleLoadPicture(pStm,0,false,IID_IPicture,(void**)&m_picture);
                
            long a,b;
                m_picture
            ->get_Width(&a);
                m_picture
            ->get_Height(&b);
                CSize sz(a,b);
                CDC 
            *pdc = GetDlgItem(IDC_STATIC)->GetDC();
                
            //    CDC *pdc = GetDC();
                
            //    pdc->HIMETRICtoDP(&sz);
                CRect rect;
                GetClientRect(rect);
                
            //    GetDlgItem(IDC_STATIC)->GetClientRect(&rect);
                m_picture
            ->Render(*pdc,0,0,sz.cx,sz.cy,0,b,a,-b,&rect);
                m_picture
            ->Render(*pdc,rect.left,rect.top,rect.Width(),
                                    rect.Height(),
            0,b,a,-b,&rect);


            也可以用GDI+把圖片轉(zhuǎn)成.bmp文件再加載,在StdAfx.h中靜態(tài)調(diào)用gdiplus.lib,即由編譯系統(tǒng)完成對(duì)DLL的加載,應(yīng)用程序結(jié)束時(shí)卸載DLL的編碼。如下:
            #ifndef   ULONG_PTR
            #define   ULONG_PTR   unsigned   long*
            #include   "GdiPlus.h"
            using   namespace   Gdiplus;
            #pragma   comment(lib,   "gdiplus.lib")
            #endif

            2、在類(lèi)的頭文件中定義,以下成員變量,用來(lái)初始化GDI+的使用和結(jié)束使用。
            GdiplusStartupInput   m_gdiplusStartupInput;  
            ULONG_PTR   m_gdiplusToken;

            3、在初始化函數(shù)中,初始化GDI+。如:在OnCreate()函數(shù)中加入初始化GDI+的函數(shù):
            GdiplusStartup(&m_gdiplusToken,   &m_gdiplusStartupInput,   NULL);

            4、對(duì)應(yīng)的在OnDestroy()函數(shù)中加入結(jié)束GDI+使用的函數(shù):  
            GdiplusShutdown(m_gdiplusToken);

            接著,就可以使用GDI+了,要實(shí)現(xiàn)要求的內(nèi)容很容易,方法如下:
            寫(xiě)一個(gè)如下的方法:
            HBITMAP   ReturnHBITMAP(CString   FileName)//FileName可能是bmp、dib、png、gif、jpeg/jpg、tiff、emf等文件的文件名
            {
                      Bitmap   tempBmp(FileName.AllocSysString())   ;
                    Color       backColor;      
                    HBITMAP       HBitmap;  
                    tempBmp.GetHBITMAP(backColor,&HBitmap);
                    return   HBitmap;

            }

            在WM5.0+VC8.0的環(huán)境下,還可以COM(組件)的方式加載圖片,這種方法能加載的圖片的格式比較全(.jpg,.png,.gif),在Windows CE Tools\wce500\Windows Mobile 5.0 Pocket PC SDK\Samples\CPP\Win32\Imaging例子中,用這個(gè)COM可以加載皮膚,有興趣的朋友可以試一下。

            posted on 2008-04-11 11:04 Benjamin 閱讀(11066) 評(píng)論(4)  編輯 收藏 引用 所屬分類(lèi): VC

            評(píng)論

            # re: vc加載jpg圖片的方法  回復(fù)  更多評(píng)論   

            你好,我現(xiàn)在是在winCE上加載JPG圖片,圖片是一段內(nèi)存中的BUFF,就是一個(gè)流,但是winCE不支持//利用流加載圖像OleLoadPicture函數(shù),卡在這里
            ,請(qǐng)教樓主有什么辦法可以實(shí)現(xiàn)啊
            2008-06-26 11:32 | ty--90

            # re: vc加載jpg圖片的方法  回復(fù)  更多評(píng)論   

            @ty--90
            CBitmap類(lèi)的Attach方法加載.jpg圖像,它的參數(shù)就是一個(gè)文件路徑,這個(gè)是專(zhuān)門(mén)針對(duì)EVC用的一個(gè)函數(shù)。具體的用法可以參照MSDN
            2008-06-28 16:08 | Herb

            # re: vc加載jpg圖片的方法[未登錄](méi)  回復(fù)  更多評(píng)論   

            你好,有兩個(gè)問(wèn)題,第一個(gè)是,在第一段代碼中,m_IsShow = TRUE;
            是什么意思?這是什么類(lèi)型的變量,還是控件聲明的變量.
            第二個(gè)問(wèn)題,是第二段代碼中,CComQIPtr<IPicture> m_picture;
            是什么意思?使用它需要加載什么文件,我用的時(shí)候它出現(xiàn)未定義的錯(cuò)誤,請(qǐng)問(wèn),怎么定義它?
            2009-04-09 11:13 | sky

            # re: vc加載jpg圖片的方法  回復(fù)  更多評(píng)論   

            m_IsShow和圖片加載無(wú)關(guān)。
            CComQIPtr<IPicture> m_picture,它用的是ATL中的智能指針。要加頭文件
            atlbase.h
            2009-04-11 14:10 | Herb
            办公室久久精品| 亚洲国产精品无码久久青草 | 精品无码久久久久久午夜| 久久国产三级无码一区二区| 91久久精品91久久性色| 亚洲国产精品久久电影欧美| 国产精品亚洲综合久久| 亚洲AV伊人久久青青草原| 久久影视综合亚洲| 无码任你躁久久久久久老妇| 久久精品国产99久久香蕉| 久久久久一本毛久久久| 久久e热在这里只有国产中文精品99 | 伊人久久大香线蕉综合Av| 伊人久久大香线焦AV综合影院| 久久精品国产免费观看| 亚洲AV无码久久寂寞少妇| 久久水蜜桃亚洲av无码精品麻豆| 久久久久久人妻无码| 91精品国产综合久久久久久| 色综合久久最新中文字幕| 2020最新久久久视精品爱| 国产精品一区二区久久精品无码| 久久国产精品无码网站| 久久青青草视频| 精品久久久久久久无码| 亚洲国产天堂久久综合网站| 久久嫩草影院免费看夜色| 国产99久久久国产精品小说| 久久久久国产精品熟女影院 | 国产精品亚洲综合专区片高清久久久 | 国产69精品久久久久99尤物| 青青草国产97免久久费观看| 一本久久a久久精品vr综合| 国产精品久久久久久久久鸭| 久久国产影院| 无码人妻精品一区二区三区久久| 精品久久久久久无码中文字幕一区| 国产福利电影一区二区三区久久久久成人精品综合 | 国产精品无码久久综合网| 偷窥少妇久久久久久久久|