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

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>
            午夜精品在线观看| 亚洲图片你懂的| 国内精品美女av在线播放| 欧美日韩亚洲一区二| 欧美激情视频免费观看| 久热精品视频在线免费观看| 久久五月天婷婷| 看欧美日韩国产| 免费看av成人| 欧美日韩在线一二三| 欧美精品尤物在线| 国产精品久久| 伊人婷婷久久| 亚洲激情成人| 亚洲综合视频一区| 久久亚洲午夜电影| 日韩视频一区二区在线观看| 正在播放欧美一区| 午夜精品网站| 亚洲伦理在线免费看| 欧美一区二区久久久| 亚洲国产精品一区二区www在线| 亚洲精品黄色| 久久久久久国产精品mv| 欧美日产在线观看| 亚洲精品国产精品国产自| 国产精品99久久久久久久vr| 久久久水蜜桃av免费网站| av不卡在线看| 欧美日韩色综合| 亚洲免费高清视频| 亚洲第一福利在线观看| 亚洲欧美日韩国产综合| 欧美日韩精品在线观看| 99re6热只有精品免费观看| 欧美体内she精视频| 夜色激情一区二区| 最新亚洲电影| 欧美女人交a| 亚洲美女中文字幕| 亚洲三级影院| 国产精品久久久| 久久成人免费视频| 久久人人爽人人| 亚洲国产成人高清精品| 亚洲国产福利在线| 欧美激情片在线观看| 亚洲一区二区三区精品在线| 亚洲私人影院| 亚洲国产精选| 亚洲一区网站| 一区二区久久| 久久久久久综合| 在线视频免费在线观看一区二区| 亚洲麻豆国产自偷在线| 国产毛片一区二区| 欧美激情第4页| 国产精品国产三级国产aⅴ浪潮| 久久久亚洲国产天美传媒修理工| 久久男女视频| 欧美在线影院| 欧美日韩综合在线| 亚洲国产一区二区精品专区| 国产精品亚洲成人| 亚洲三级国产| 亚洲第一久久影院| 欧美一二三区在线观看| 欧美一区1区三区3区公司| 欧美黄网免费在线观看| 久久欧美肥婆一二区| 国产日韩欧美在线观看| 亚洲国产三级在线| 欧美在线地址| 性做久久久久久久久| 欧美日韩激情小视频| 亚洲人久久久| 亚洲网站啪啪| 国产精品a级| 亚洲午夜小视频| 性色一区二区三区| 免费中文日韩| 在线看欧美视频| 欧美成人精品1314www| 亚洲电影av在线| 一本久久a久久免费精品不卡| 欧美激情国产日韩精品一区18| 欧美精品一区二区三区蜜桃| 最新日韩在线视频| 久久se精品一区精品二区| 国内免费精品永久在线视频| 久久av在线看| 亚洲精品婷婷| 欧美激情一区二区| 亚洲一级网站| 亚洲国产美国国产综合一区二区| 欧美激情中文不卡| 欧美一区二区三区男人的天堂| 免费不卡中文字幕视频| 一区二区三区产品免费精品久久75 | 久久精品午夜| 99国产精品久久久| 黑人极品videos精品欧美裸| 欧美国产成人精品| 久久精品日产第一区二区| 亚洲午夜在线观看视频在线| 免费不卡在线视频| 久久久久久久久久久成人| 亚洲高清视频中文字幕| 一本色道久久88亚洲综合88| 欧美黑人多人双交| 久久一区二区精品| 久久经典综合| 性久久久久久久久| 久久精品国亚洲| 久久精品理论片| 久久久久99精品国产片| 久久精品视频va| 久久久精品tv| 欧美成人a∨高清免费观看| 麻豆91精品| 91久久久精品| 亚洲激情小视频| 一本色道久久88综合亚洲精品ⅰ| 亚洲日本在线视频观看| 亚洲精品网站在线播放gif| 一本一本久久| 久久久精品日韩| 欧美成人免费在线视频| 欧美视频在线一区| 亚洲国产日韩美| 欧美一区二区三区播放老司机| 久久综合九色综合欧美狠狠| 久久狠狠亚洲综合| 国产欧美日韩在线观看| 午夜精品久久久久99热蜜桃导演| 亚洲伊人第一页| 久久综合精品一区| 午夜激情亚洲| 国产精品国产精品| 亚洲人成人77777线观看| 亚洲视频精品在线| 欧美暴力喷水在线| 久久av红桃一区二区小说| 国产精品久久久久aaaa樱花| 亚洲一二三四久久| 宅男66日本亚洲欧美视频| 亚洲精品国久久99热| 久久久久久久久久久久久久一区 | 新狼窝色av性久久久久久| 欧美日韩视频一区二区| 国产视频欧美视频| 美女精品自拍一二三四| 久久综合久久88| 日韩一区二区电影网| 宅男66日本亚洲欧美视频| 亚洲视频在线观看网站| 久久久精品一品道一区| 亚洲深夜福利在线| 欧美在现视频| 亚洲午夜视频在线| 久久婷婷久久一区二区三区| 亚洲国产精品激情在线观看| 欧美搞黄网站| 国产精品久久久久久久久搜平片 | 欧美精品在欧美一区二区少妇| 亚洲精品中文字幕女同| 一本久道久久综合中文字幕| 国产日产欧美a一级在线| 欧美国产日产韩国视频| 欧美日本韩国一区| 久久久.com| 欧美日韩国产一区二区| 快射av在线播放一区| 欧美日韩国产综合网| 嫩草伊人久久精品少妇av杨幂| 欧美视频官网| 欧美成人资源网| 在线观看成人av电影| 亚洲欧美日韩高清| 欧美一进一出视频| 国产精品观看| 这里是久久伊人| 欧美一区二区三区四区在线观看 | 一区二区不卡在线视频 午夜欧美不卡' | 亚洲综合丁香| 欧美日韩国产不卡| 亚洲国产成人不卡| 在线观看成人小视频| 久久久91精品国产| 模特精品裸拍一区| 亚洲第一色在线| 久久人人爽爽爽人久久久| 久久国产一区| 国产一区二区欧美| 久久久久88色偷偷免费| 欧美成人免费全部| 99re这里只有精品6| 国产毛片一区二区| 久久久久久久网| 亚洲第一区中文99精品|