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

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 閱讀(11105) 評論(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>
            国产精品网站在线播放| 亚洲午夜精品一区二区三区他趣| 欧美成熟视频| 久久久国产精品一区| 麻豆乱码国产一区二区三区| 99在线精品免费视频九九视| 欧美一区二区三区在线看| 有坂深雪在线一区| 亚洲天天影视| 亚洲精品日韩一| 亚洲专区免费| 一区二区三区四区五区精品| 午夜亚洲精品| 亚洲人成网站色ww在线| 欧美激情精品久久久久久| 亚洲欧洲在线视频| 亚洲黄色一区| 国产精品日韩精品欧美在线| 亚洲欧美日韩精品久久奇米色影视| 永久域名在线精品| 你懂的视频一区二区| 久久久91精品国产一区二区三区 | 久久精品视频在线| 欧美久久电影| 久久综合一区二区三区| 欧美日韩亚洲一区三区 | 亚洲香蕉在线观看| 在线一区二区三区做爰视频网站| 欧美一级黄色网| 中文无字幕一区二区三区| 免费精品视频| 亚洲人成网在线播放| 国产欧美日韩综合一区在线观看| 久久综合成人精品亚洲另类欧美| 欧美日韩在线精品| 欧美激情网友自拍| 激情综合久久| 性久久久久久久久| 欧美一区激情视频在线观看| 国产精品爱久久久久久久| 亚洲乱码国产乱码精品精可以看 | 亚洲香蕉成视频在线观看| 亚洲精品美女久久久久| 久久中文精品| 久久国产日韩| 国产精品女主播一区二区三区| 亚洲免费观看在线观看| 亚洲电影av在线| 久久蜜桃精品| 亚洲电影免费在线| 亚洲日本中文| 免费国产一区二区| 欧美黄污视频| 亚洲高清在线观看| 欧美成人精品一区二区| 欧美成年人网站| 影音先锋中文字幕一区| 亚洲欧美日韩另类精品一区二区三区| 亚洲一区国产视频| 欧美午夜精品理论片a级大开眼界 欧美午夜精品理论片a级按摩 | 在线观看久久av| 久久久久.com| 欧美激情第三页| 一区二区三区四区国产| 国产精品v片在线观看不卡| 亚洲人成人一区二区三区| 亚洲一区成人| 国产午夜精品理论片a级探花 | 国产精品乱码一区二三区小蝌蚪 | 亚洲欧洲一区| 欧美一级播放| 在线播放一区| 欧美日韩国产美女| 亚洲欧美国产77777| 噜噜噜91成人网| 99精品国产高清一区二区| 国产精品海角社区在线观看| 欧美中文在线免费| 欧美粗暴jizz性欧美20| 亚洲狼人精品一区二区三区| 欧美高清不卡在线| 亚洲男人第一av网站| 欧美国产第二页| 亚洲一区欧美二区| 在线观看国产一区二区| 欧美日韩午夜激情| 久久在线视频| 香蕉久久一区二区不卡无毒影院| 欧美xx视频| 久久久久久一区| 亚洲五月婷婷| 日韩亚洲精品电影| 国模套图日韩精品一区二区| 欧美日韩亚洲一区二区三区四区 | 欧美日韩视频在线观看一区二区三区 | 亚洲亚洲精品在线观看| 美女精品在线观看| 小黄鸭视频精品导航| 亚洲毛片av| 国产视频一区在线| 欧美精品www| 亚洲免费小视频| 亚洲人成网站影音先锋播放| 久久精品国产一区二区三| 中文欧美字幕免费| 亚洲精品国产日韩| 精品99一区二区| 国产精品网站视频| 欧美视频1区| 性xx色xx综合久久久xx| 亚洲精品免费观看| 欧美国产高潮xxxx1819| 午夜精品久久久| 99视频精品免费观看| 1024亚洲| 国产主播精品| 国产精品不卡在线| 欧美日韩精品综合| 欧美h视频在线| 久久精品在线观看| 亚洲在线网站| 99亚洲一区二区| 欧美电影打屁股sp| 久久久国产精品一区| 午夜在线视频观看日韩17c| 日韩亚洲成人av在线| 91久久精品一区二区三区| 极品尤物av久久免费看| 国产人成精品一区二区三| 国产精品视频一区二区三区| 国产精品久久久久一区二区三区 | 免费的成人av| 毛片基地黄久久久久久天堂| 麻豆久久精品| 欧美搞黄网站| 亚洲人成网站色ww在线| 99国产精品视频免费观看| 亚洲欧洲一区二区三区在线观看| 欧美福利在线观看| 欧美激情1区2区3区| 亚洲激情视频| 99在线精品免费视频九九视| 午夜久久黄色| 久久蜜桃资源一区二区老牛| 美女脱光内衣内裤视频久久影院| 免费高清在线一区| 欧美日韩的一区二区| 国产精品v欧美精品v日韩精品| 国产精品一区二区在线观看网站 | 欧美日韩第一页| 国产精品v欧美精品∨日韩| 国产亚洲精品资源在线26u| 伊人久久综合| 亚洲专区欧美专区| 久久久久久久久久久成人| 免费日本视频一区| 国产综合久久久久久| 久久精品噜噜噜成人av农村| 在线观看视频一区| 亚洲国产精品一区二区第四页av | 91久久精品美女高潮| 一区二区三区欧美在线观看| 亚洲自拍电影| 久热精品在线视频| 欧美日韩专区在线| 激情欧美丁香| 亚洲视频日本| 免费不卡在线视频| 一区二区三区国产| 久久久久久电影| 欧美日韩不卡一区| 狠狠88综合久久久久综合网| 亚洲免费观看高清完整版在线观看| 夜夜嗨av一区二区三区| 亚洲欧美视频在线| 欧美成人在线免费视频| 亚洲小视频在线| 欧美高清在线精品一区| 国产精品资源在线观看| 永久久久久久| 午夜精品福利一区二区蜜股av| 亚洲国产va精品久久久不卡综合| 91久久极品少妇xxxxⅹ软件| 久久久久免费观看| 国内成人自拍视频| 欧美影院成人| 亚洲欧美国产高清| 国产精品一区二区黑丝| 亚洲综合国产精品| 99精品国产高清一区二区| 欧美激情精品久久久久久久变态| 亚洲国产精品一区在线观看不卡 | 在线一区二区三区四区| 欧美国产在线观看| 久久综合伊人77777蜜臀| 在线观看日韩av先锋影音电影院| 久久久亚洲人| 久久精品视频在线| 在线精品视频一区二区| 欧美成人精品高清在线播放|