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

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视频精品全国免费| 亚洲激情一区| 一区二区毛片| 国产欧美精品一区二区三区介绍| 久久久青草婷婷精品综合日韩 | 欧美国产综合视频| 国产精品黄色| 欧美在线三区| 日韩视频免费观看| 国产欧美午夜| 欧美日韩一区二区精品| 欧美一区二区三区四区在线观看地址 | 亚洲国产第一页| 午夜伦欧美伦电影理论片| 激情小说另类小说亚洲欧美| 欧美日韩福利视频| 老巨人导航500精品| 亚洲欧美综合v| 日韩视频免费观看高清在线视频| 亚洲免费在线观看| 亚洲激情影院| 韩国免费一区| 亚洲午夜精品| 欧美日韩免费观看一区二区三区| 国产在线精品自拍| 亚洲欧美日韩另类| 亚洲在线黄色| 国产精品制服诱惑| 亚洲在线成人精品| 欧美成人综合| 一区二区免费在线视频| 狠狠色综合一区二区| 久久福利一区| 欧美专区在线| 亚洲欧美色婷婷| 亚洲欧美一区二区视频| 欧美一区二区成人6969| 一区二区三区av| 91久久精品美女| 亚洲国产精品精华液网站| 亚洲国产成人av| 亚洲免费观看视频| 这里只有视频精品| 香蕉久久夜色精品国产使用方法| 亚洲欧美韩国| 久久久久久久999| 免费看亚洲片| 国产精品久久久久久av福利软件 | 亚洲电影自拍| 日韩视频欧美视频| 亚洲精品你懂的| 欧美色视频一区| 亚洲免费视频网站| 亚洲图片欧美日产| 老司机成人网| 91久久综合| 久久久高清一区二区三区| 在线一区二区视频| 欧美性猛交99久久久久99按摩 | 午夜在线视频观看日韩17c| 国产精品自拍一区| 亚洲国产精品视频| 麻豆国产精品va在线观看不卡| 欧美高清视频一二三区| 亚洲美女诱惑| 欧美日韩亚洲一区二| 久久夜色精品国产亚洲aⅴ| 亚洲成人在线网站| 亚洲毛片av| 欧美激情亚洲激情| 亚洲伊人网站| 久久久久久久999精品视频| 国产精品高潮呻吟久久av黑人| 亚洲一区欧美| 亚洲你懂的在线视频| 欧美成年视频| 亚洲专区欧美专区| 欧美高清在线观看| 一区二区三区**美女毛片| 欧美精品日韩一区| 亚洲一区二区三区午夜| 日韩午夜三级在线| 欧美www视频| 国产精品xxxav免费视频| 在线看欧美视频| 欧美成人69| 亚洲国产精品一区| 日韩亚洲精品在线| 国产喷白浆一区二区三区| 老司机一区二区三区| 亚洲一区二区三区激情| 久久aⅴ国产紧身牛仔裤| 亚洲裸体俱乐部裸体舞表演av| 国产精品稀缺呦系列在线| 久久久久这里只有精品| 宅男在线国产精品| 一个人看的www久久| 99人久久精品视频最新地址| 亚洲欧洲日本专区| 亚洲三级免费电影| 亚洲欧美一区二区在线观看| 欧美福利视频在线观看| 欧美一区二区三区成人| 欧美日韩无遮挡| 亚洲人成网站色ww在线| 久久久久国产精品午夜一区| 一区二区三区高清不卡| 女仆av观看一区| 在线播放视频一区| 久久高清免费观看| 日韩一级网站| 午夜一区不卡| 久久亚洲一区二区| 久久精品国产亚洲一区二区三区| 亚洲免费成人av电影| 日韩网站在线观看| 亚洲电影在线免费观看| 日韩亚洲欧美高清| 日韩网站在线| 亚洲一区二区三区乱码aⅴ| 99国产精品国产精品久久| 亚洲国产精品激情在线观看| 亚洲三级影院| 亚洲在线免费观看| 亚洲欧美日韩高清| 国产精品久久久久9999吃药| 一区二区三区视频在线| 欧美激情在线| 欧美成人自拍视频| 亚洲精选一区| 亚洲毛片一区二区| 欧美日韩亚洲一区二区三区| 亚洲一区不卡| 亚洲天堂男人| 国产久一道中文一区| 欧美在线|欧美| 欧美影院在线| 尤物yw午夜国产精品视频| 欧美freesex8一10精品| 女主播福利一区| 日韩一区二区精品| 日韩视频一区二区| 国产精品美女久久福利网站| 欧美一区综合| 久久成人亚洲| 亚洲国产精品久久| 欧美电影在线免费观看网站| 欧美承认网站| 亚洲香蕉在线观看| 亚洲欧美日韩综合一区| 狠狠做深爱婷婷久久综合一区 | 亚洲欧洲一区二区三区在线观看| 久久婷婷国产综合国色天香| 久久久蜜桃一区二区人| 亚洲欧洲精品一区二区三区不卡| 亚洲精品视频二区| 国产精品视频一二三| 久久天堂精品| 欧美精品久久一区二区| 欧美一区二粉嫩精品国产一线天| 久久久精品国产99久久精品芒果| 亚洲精品欧美极品| 亚洲小视频在线观看| 影音先锋中文字幕一区| 亚洲毛片一区| 国产综合亚洲精品一区二| 亚洲黄色av| 国产偷久久久精品专区| 亚洲国产精品毛片| 国产拍揄自揄精品视频麻豆| 亚洲高清在线播放| 国产老肥熟一区二区三区| 亚洲第一黄色| 国产精品久久久久久久免费软件| 米奇777在线欧美播放| 欧美三级电影大全| 美日韩精品免费| 国产精品啊啊啊| 欧美福利在线观看| 国产欧美精品xxxx另类| 欧美激情免费在线| 国产欧美日韩不卡| 亚洲精品网站在线播放gif| 国产一二三精品| 日韩视频一区二区三区在线播放免费观看 | 亚洲欧美日韩国产中文| 久久日韩粉嫩一区二区三区| 亚洲欧美国产va在线影院| 美国十次成人| 欧美一区二区三区在线视频 | 久久免费视频网站| 亚洲午夜日本在线观看| 麻豆精品传媒视频| 老司机免费视频久久| 久久精品视频导航| 亚洲午夜久久久久久久久电影院 | 国产精品激情电影| 欧美中文字幕不卡| 欧美a级片网站| 欧美亚洲专区|