青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Benjamin

靜以修身,儉以養德,非澹薄無以明志,非寧靜無以致遠。
隨筆 - 398, 文章 - 0, 評論 - 196, 引用 - 0
數據加載中……

vc加載jpg圖片的方法

MFC提供的CWnd只有默認加載BMP文件的接口,對JPG等圖像是不支持的,而實際中經常需要用到非BMP的圖片,在VC中加載.JPG格式的圖片,有兩種方法,用流對象加載和用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 );

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

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

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

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

IStream
*  m_stream;

GlobalUnlock(m_hglobal);

//在堆中創建流對象
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);

以上代碼是用創建流文件的方式加載,也可以加載.gif圖片,但不能顯示動畫效果。
下面的代碼則是用IPicture接口的方式來加載jpg圖片(全屏顯示圖片)。
注意:這兩段代碼不能用在wince平臺上,在wince上加載有另外的函數。
    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, //渲染圖像用的設備環境句柄
    
// long x, //在hdc上的水平坐標
    
// long y, //在hdc上的垂直坐標
    
// long cx, //圖像寬度
    
// long cy, //圖像高度
    
// OLE_XPOS_HIMETRIC xSrc, //在源圖像上的水平偏移
    
// OLE_YPOS_HIMETRIC ySrc, //在源圖像上的垂直偏移
    
// OLE_XSIZE_HIMETRIC cxSrc,//在源圖像上水平拷貝的數量
    
// OLE_YSIZE_HIMETRIC cySrc,//在源圖像上垂直拷貝的數量
    
// LPCRECT prcWBounds //指向目標圖元設備環境句柄的指針);
    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+把圖片轉成.bmp文件再加載,在StdAfx.h中靜態調用gdiplus.lib,即由編譯系統完成對DLL的加載,應用程序結束時卸載DLL的編碼。如下:
#ifndef   ULONG_PTR
#define   ULONG_PTR   unsigned   long*
#include   "GdiPlus.h"
using   namespace   Gdiplus;
#pragma   comment(lib,   "gdiplus.lib")
#endif

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

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

4、對應的在OnDestroy()函數中加入結束GDI+使用的函數:  
GdiplusShutdown(m_gdiplusToken);

接著,就可以使用GDI+了,要實現要求的內容很容易,方法如下:
寫一個如下的方法:
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的環境下,還可以COM(組件)的方式加載圖片,這種方法能加載的圖片的格式比較全(.jpg,.png,.gif),在Windows CE Tools\wce500\Windows Mobile 5.0 Pocket PC SDK\Samples\CPP\Win32\Imaging例子中,用這個COM可以加載皮膚,有興趣的朋友可以試一下。

posted on 2008-04-11 11:04 Benjamin 閱讀(11093) 評論(4)  編輯 收藏 引用 所屬分類: VC

評論

# re: vc加載jpg圖片的方法  回復  更多評論   

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

# re: vc加載jpg圖片的方法  回復  更多評論   

@ty--90
CBitmap類的Attach方法加載.jpg圖像,它的參數就是一個文件路徑,這個是專門針對EVC用的一個函數。具體的用法可以參照MSDN
2008-06-28 16:08 | Herb

# re: vc加載jpg圖片的方法[未登錄]  回復  更多評論   

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

# re: vc加載jpg圖片的方法  回復  更多評論   

m_IsShow和圖片加載無關。
CComQIPtr<IPicture> m_picture,它用的是ATL中的智能指針。要加頭文件
atlbase.h
2009-04-11 14:10 | Herb
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲免费久久| 欧美电影免费观看网站 | 尤物yw午夜国产精品视频明星| 欧美一级午夜免费电影| 亚洲综合第一页| 国产日韩欧美综合一区| 另类专区欧美制服同性| 欧美大胆成人| 香蕉成人伊视频在线观看| 久久gogo国模啪啪人体图| 亚洲国产一区二区三区高清| 亚洲精品免费看| 国产精品一级在线| 免费久久99精品国产| 欧美日韩第一区| 久久九九国产| 欧美日本二区| 久久久一二三| 欧美日韩一区二区免费视频| 久久精品亚洲热| 欧美日韩国产一级| 久久亚洲影音av资源网| 欧美日韩和欧美的一区二区| 久久精品免费电影| 欧美日韩在线影院| 久久夜色精品国产噜噜av| 欧美日本亚洲视频| 久久亚洲高清| 国产精品一区二区在线观看不卡 | 91久久国产精品91久久性色| 国产精品专区h在线观看| 亚洲大胆av| 国产亚洲欧美日韩日本| 亚洲美女毛片| 91久久国产综合久久| 性8sex亚洲区入口| 亚洲一区二区三区四区中文| 久久久噜噜噜久久久| 亚洲欧美一区二区原创| 欧美激情一区在线| 欧美成人国产一区二区| 国产日韩精品在线观看| 9l国产精品久久久久麻豆| 亚洲激情女人| 久久久久久久久综合| 欧美在线观看一区二区| 国产精品久久999| 亚洲人成欧美中文字幕| 伊人天天综合| 久久精品亚洲一区| 久久精品在线播放| 国产午夜久久久久| 午夜精品久久久久久久99水蜜桃| 欧美日本不卡高清| 欧美激情视频网站| 亚洲第一在线视频| 久久综合久久久久88| 久久夜色精品亚洲噜噜国产mv | 欧美激情按摩在线| 欧美黄色影院| 亚洲三级电影全部在线观看高清| 老**午夜毛片一区二区三区| 欧美成人精品高清在线播放| 在线观看不卡av| 久久亚洲欧美| 亚洲国产一区二区三区a毛片 | 136国产福利精品导航网址应用| 欧美一区二区三区视频免费| 久久久国产精彩视频美女艺术照福利| 国产精品视频免费在线观看| 亚洲欧美国产毛片在线| 久久精品视频免费播放| 伊人久久大香线| 欧美成人免费va影院高清| 亚洲欧洲免费视频| 亚洲五月婷婷| 国产午夜精品美女视频明星a级 | 欧美成人精品不卡视频在线观看 | 亚洲一区视频在线| 久久精视频免费在线久久完整在线看 | 欧美成人一区二区三区片免费| 在线免费观看视频一区| 欧美99在线视频观看| 亚洲激情影视| 午夜精品免费视频| 精品福利av| 欧美乱大交xxxxx| 亚洲欧美日韩国产成人精品影院| 久久三级视频| 一区二区三区四区精品| 国产区亚洲区欧美区| 久久久噜噜噜久噜久久 | 亚欧成人精品| 亚洲国产专区| 国产精品系列在线播放| 免费在线观看日韩欧美| 亚洲一区免费视频| 欧美成人综合一区| 亚洲欧美中文在线视频| 亚洲国产精品免费| 国产精品一区一区三区| 欧美成年人视频网站| 亚洲欧美一区二区精品久久久| 欧美高清你懂得| 性做久久久久久免费观看欧美 | 国产精品一区二区三区乱码| 久久五月激情| 午夜精品久久久久久久蜜桃app| 欧美大片免费| 久久久精品tv| 午夜久久一区| 妖精视频成人观看www| 激情久久影院| 午夜激情亚洲| 一本综合精品| 亚洲精品免费在线| 免费在线日韩av| 欧美自拍丝袜亚洲| 亚洲一级影院| 夜夜嗨av一区二区三区| 在线国产日韩| 狠狠色香婷婷久久亚洲精品| 国产精品成人播放| 欧美日韩一区二区在线播放| 美女脱光内衣内裤视频久久网站| 欧美在线视频免费播放| 中文在线资源观看网站视频免费不卡| 欧美激情欧美狂野欧美精品| 麻豆精品传媒视频| 久久久久久久久久久一区| 午夜在线视频一区二区区别| 亚洲夜晚福利在线观看| 亚洲作爱视频| 日韩亚洲精品在线| 亚洲精品国产品国语在线app| 激情婷婷亚洲| 在线不卡亚洲| 亚洲国产美女精品久久久久∴| 狠狠色狠狠色综合| 亚洲第一二三四五区| 在线观看欧美亚洲| 亚洲国产成人av好男人在线观看| 伊人激情综合| 亚洲精品少妇30p| 日韩视频免费看| 亚洲天堂成人在线观看| 亚洲天堂免费观看| 亚洲男人的天堂在线| 欧美一区国产二区| 另类av导航| 欧美黄色免费网站| 亚洲日本欧美| 亚洲图片欧美午夜| 午夜免费电影一区在线观看| 欧美在线视频免费| 欧美1区2区| 国产精品国产| 激情亚洲网站| 亚洲精品一二三| 亚洲伊人第一页| 久久xxxx| 亚洲国产三级在线| 亚洲视频免费| 久久久国产精品一区二区三区| 欧美成人一区二区在线| 国产精品成人在线观看| 韩国一区二区三区在线观看| 亚洲国产精品va在线看黑人动漫 | 日韩一区二区精品葵司在线| 亚洲视频欧美在线| 久久人人97超碰人人澡爱香蕉| 亚洲电影免费| 亚洲主播在线| 欧美国产视频一区二区| 国产精品一区在线播放| 亚洲人屁股眼子交8| 欧美专区日韩视频| 欧美久久电影| 韩国精品一区二区三区| 99av国产精品欲麻豆| 久久精品视频99| 9久re热视频在线精品| 久久动漫亚洲| 国产精品久久久久毛片大屁完整版| 国产中文一区二区| 中文av字幕一区| 欧美a级大片| 午夜精品久久| 欧美午夜性色大片在线观看| 亚洲二区视频在线| 久久精品国产免费看久久精品| 亚洲精华国产欧美| 久久躁日日躁aaaaxxxx| 国产精品一香蕉国产线看观看 | 久久人体大胆视频| 国产精品欧美一区二区三区奶水| 亚洲欧洲一区二区三区久久| 久久久国产一区二区三区| 99精品视频免费观看| 欧美.com|