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

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 閱讀(11103) 評論(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>
            亚洲欧美日韩综合国产aⅴ| 国产欧美日韩伦理| 亚洲一区亚洲| 一个色综合导航| 亚洲一区二区日本| 亚洲欧美国产日韩中文字幕| 亚洲性感美女99在线| 亚洲男人天堂2024| 午夜精品视频在线观看| 久久久精品国产免费观看同学| 久久精品99久久香蕉国产色戒| 亚洲天堂av图片| 午夜在线电影亚洲一区| 久久久久久亚洲综合影院红桃 | 久久大逼视频| 久久久精品国产99久久精品芒果| 久久香蕉国产线看观看av| 欧美激情国产日韩| 亚洲影院高清在线| 免费h精品视频在线播放| 亚洲一区二区三区免费视频| 亚洲激情综合| 亚洲人精品午夜| 亚洲欧美一区二区三区极速播放 | 午夜精品久久久久久久99水蜜桃| 久久成人免费视频| 国产精品h在线观看| 欧美午夜精品理论片a级按摩| 国产精品影视天天线| 国外成人网址| 一区二区欧美国产| 久久九九全国免费精品观看| 亚洲日本黄色| 欧美在线观看视频在线| 欧美成人午夜激情视频| 国产日韩欧美在线看| 亚洲三级视频在线观看| 久久riav二区三区| 一区二区日本视频| 蜜桃av噜噜一区| 国产农村妇女精品一二区| 91久久午夜| 久久免费国产精品1| 一二三区精品福利视频| 美女视频黄免费的久久| 国产欧美亚洲视频| 一本色道久久综合亚洲91 | 91久久久久久久久| 久久综合伊人77777蜜臀| 国产视频欧美| 欧美一级片一区| 99亚洲视频| 欧美日韩国产美女| 99精品欧美一区二区蜜桃免费| 农村妇女精品| 麻豆精品91| 91久久中文字幕| 亚洲国产一区二区三区a毛片| 久久蜜桃香蕉精品一区二区三区| 国产情人综合久久777777| 亚洲综合激情| 亚洲视频碰碰| 国产精品大片| 小黄鸭精品aⅴ导航网站入口| 一区二区三区www| 欧美午夜片欧美片在线观看| 亚洲私人影院| 亚洲字幕一区二区| 国产欧美日韩一级| 久久综合久久久久88| 久久精品99国产精品| 在线精品观看| 亚洲日本aⅴ片在线观看香蕉| 欧美精品免费看| 亚洲天堂成人在线观看| 亚洲视频一区二区在线观看| 国产精品免费一区二区三区在线观看| 亚洲欧美日韩第一区| 亚洲欧美电影在线观看| 国产一区二区三区久久久久久久久 | 日韩一级精品视频在线观看| 国产精品久久久久9999吃药| 久久婷婷激情| 久久久人人人| 亚洲第一在线综合在线| 亚洲成色777777女色窝| 欧美夫妇交换俱乐部在线观看| 亚洲国产一区在线| 一区二区国产日产| 国产亚洲永久域名| 亚洲第一视频网站| 欧美三级在线视频| 久久久久久久尹人综合网亚洲| 蜜臀a∨国产成人精品 | 欧美激情按摩| 国产精品久久999| 久久天天躁狠狠躁夜夜爽蜜月 | 久久亚洲精品网站| 亚洲精品婷婷| 午夜日韩在线| aa日韩免费精品视频一| 欧美在线免费观看亚洲| 亚洲国产精品第一区二区| 亚洲网在线观看| 国产日韩成人精品| 欧美+日本+国产+在线a∨观看| 欧美日韩综合在线免费观看| 欧美xart系列高清| 欧美色大人视频| 欧美激情91| 国产精品亚洲综合一区在线观看| 欧美激情一二三区| 国内精品久久久久久久影视蜜臀| 日韩午夜精品视频| 国产一区激情| 日韩一级免费| 亚洲精品视频一区| 久久婷婷色综合| 欧美一区免费| 国产精品区一区| 一区二区成人精品| 亚洲精品视频在线观看网站| 久久av一区二区三区漫画| 亚洲欧美精品| 欧美日产国产成人免费图片| 亚洲大胆视频| 国语精品一区| 久久不见久久见免费视频1| 亚洲欧美经典视频| 久热爱精品视频线路一| 美女黄毛**国产精品啪啪| 国产亚洲精品激情久久| 国产精品99久久久久久久女警| 一区二区三区高清视频在线观看 | 国产一区二区三区黄| 亚洲欧美视频一区| 欧美在线观看视频在线| 国产亚洲福利一区| 欧美在线免费视屏| 久久综合狠狠综合久久综青草 | 欧美成人一品| 亚洲专区一区二区三区| 精品动漫av| 久久米奇亚洲| 欧美大片在线观看| 亚洲精品社区| 欧美日韩网站| 亚洲手机成人高清视频| 欧美一乱一性一交一视频| 国产欧美一区二区三区久久 | 欧美日韩国产亚洲一区| 99re8这里有精品热视频免费| 亚洲乱码国产乱码精品精天堂| 欧美日韩成人一区| 亚洲特级片在线| 久久成人免费视频| 在线看欧美日韩| 欧美不卡高清| 在线亚洲精品福利网址导航| 欧美影院精品一区| 精品1区2区| 欧美日韩第一区日日骚| 亚洲视频电影在线| 老妇喷水一区二区三区| 亚洲乱码国产乱码精品精98午夜| 欧美日韩激情小视频| 亚洲综合99| 欧美电影在线| 亚洲永久字幕| 国产亚洲免费的视频看| 欧美成人精品不卡视频在线观看 | 久久99在线观看| 亚洲国产高清一区| 国产精品成人一区二区三区吃奶| 久久国产精品久久国产精品| 亚洲电影中文字幕| 亚洲欧美综合网| 亚洲国产高清高潮精品美女| 欧美午夜一区二区三区免费大片| 午夜精品剧场| 亚洲国产一区在线| 久久精品视频免费| 一区二区国产日产| 在线免费不卡视频| 国产精品无码专区在线观看| 麻豆成人精品| 欧美一区二区精美| 99国产精品视频免费观看一公开| 久久久91精品国产一区二区精品| 日韩一级不卡| 一区二区三区自拍| 国产精品系列在线播放| 欧美日韩精品久久久| 裸体歌舞表演一区二区| 欧美在线播放视频| 亚洲午夜激情| 99在线精品观看| 亚洲精品自在在线观看| 欧美激情aⅴ一区二区三区| 久久夜色精品|