當前位置:編程學習大全網 - 源碼破解 - c++中如何調用?

c++中如何調用?

有很多辦法

比如用IPicture

用CBitmap //MFC

更直接的是

用File進行文件操作,用BitBlt顯示

具體代碼妳用以上關鍵字Google下

這裏給妳推薦幾個,末尾給妳附壹個網上可以找到的CPicture類(需MFC支持):

-------IPicture

// pDoc為文檔對象指針

// pDC為設備描述表指針

::CoInitialize(NULL); // COM 初始化

HRESULT hr;

CFile file;

file.Open(pDoc->GetPathName(), CFile::modeRead | CFile::shareDenyNone ); // 讀入文件內容

DWORD dwSize = file.GetLength();

HGLOBAL hMem = ::GlobalAlloc( GMEM_MOVEABLE, dwSize );

LPVOID lpBuf = ::GlobalLock( hMem );

file.ReadHuge( lpBuf, dwSize );

file.Close();

::GlobalUnlock( hMem );

IStream * pStream = NULL;

IPicture * pPicture = NULL;

// 由 HGLOBAL 得到 IStream,參數 TRUE 表示釋放 IStream 的同時,釋放內存

hr = ::CreateStreamOnHGlobal( hMem, TRUE, &pStream );

ASSERT ( SUCCEEDED(hr) );

hr = ::OleLoadPicture( pStream, dwSize, TRUE, IID_IPicture, ( LPVOID * )&pPicture );

ASSERT(hr==S_OK);

long nWidth,nHeight; // 寬高,MM_HIMETRIC 模式,單位是0.01毫米

pPicture->get_Width( &nWidth ); // 寬

pPicture->get_Height( &nHeight ); // 高

CRect rect;

GetClientRect(&rect);

CSize sz( nWidth, nHeight );

pDC->HIMETRICtoDP( &sz ); // 轉換 MM_HIMETRIC 模式單位為 MM_TEXT 像素單位

long x, y, cx, cy;

// 原始大小

/*

cx = sz.cx;

cy = sz.cy;

x = rect.Width() / 2 - cx / 2;

y = rect.Height() / 2 - cy / 2;

*/

// 自動適應窗口

double fRatePic, fRateWnd;

fRatePic = (double)sz.cx / (double)sz.cy;

fRateWnd = (double)rect.Width() / (double)rect.Height();

if (fRatePic > fRateWnd)

{

cx = rect.Width();

cy = (long)(rect.Width() / fRatePic);

}

else

{

cx = (long)(rect.Height() * fRatePic);

cy = rect.Height();

}

if (cx == rect.Width())

{

x = 0;

y = rect.Height() / 2 - cy / 2;

}

if (cy == rect.Height())

{

x = rect.Width() / 2 - cx / 2;

y = 0;

}

pPicture->Render(pDC->m_hDC, x, y, cx, cy,

0, nHeight, nWidth, -nHeight, NULL);

if ( pPicture ) pPicture->Release();// 釋放 IPicture 指針

if ( pStream ) pStream->Release(); // 釋放 IStream 指針,同時釋放了 hMem

::CoUninitialize();

--------------------------------CBitmap:

HBITMAP bitmap;

bitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),strFileName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);

m_backBitmap.DeleteObject();

if(!m_backBitmap.Attach(bitmap))

{

MessageBox("導入背景圖失敗!","提示",MB_OK);

return;

}

----------------------File:略

前提是妳要知道圖片的編碼格式

壹般比較簡單的是BMP,包括

BITMAPFILEHEADER,BITMAPINFO,BITMAPINFOHEADER

如果圖片采用了壓縮算法可能會麻煩壹點,

關於詳細情況妳也以Google壹下

附CPicture(引用自網上)

// Picture.h: interface for the CPicture

#ifndef PICTURE_H

#ifndef picture_h

#define PICTURE_H

#define picture_h

#if _MSC_VER > 1000

#pragma once

#endif // _MSC_VER > 1000

class CPicture

{

public:

CPicture();

virtual ~CPicture();

public:

BOOL LoadPicture(UINT nResource, LPCTSTR lpszResType)

{return LoadPicture(MAKEINTRESOURCE(nResource), lpszResType);}

BOOL LoadPictureFromFile(LPCTSTR lpszFileName);

BOOL LoadPicture(LPCTSTR lpszResource,LPCTSTR lpszResType);

BOOL IsValid(){ return m_pPic!=NULL;}

CSize GetSize(){return m_size;}

void Draw(CDC* pDC, LPCRECT lprcDest, LPCRECT lprcSrc);

void Draw(CDC* pDC, int xDest,int yDest, int cxDest, int cyDest ,

int xSrc ,int ySrc ,int cxSrc ,int cySrc);

void Release();

protected:

IPicture* m_pPic;

OLE_XSIZE_HIMETRIC _w_him;

OLE_YSIZE_HIMETRIC _h_him;

CSize m_size;

protected:

void CalcSize();

};

#endif // define picture_h

#endif // define PICTURE_H

//////////////////////////////////////////////////////////////////////

// Picture.cpp: implementation of the CPicture class.

// Lounge Stdio 2003

// 作者:邊城浪子(QQ:16168666)

// E-mail: krh2001.lpfdiyvbb@163.com

//////////////////////////////////////////////////////////////////////

#include "stdafx.h"

#include "Picture.h"

#ifdef _DEBUG

#undef THIS_FILE

static char THIS_FILE[]=__FILE__;

#define new DEBUG_NEW

#endif

//////////////////////////////////////////////////////////////////////

// Construction/Destruction

//////////////////////////////////////////////////////////////////////

CPicture::CPicture()

:m_pPic(NULL), _h_him(0), _w_him(0), m_size(0,0)

{

}

CPicture::~CPicture()

{

Release();

}

void CPicture::Release()

{

if(m_pPic != NULL)

{

m_pPic->Release();

m_pPic = NULL;

_h_him = _w_him = 0;

m_size.cx = m_size.cy = 0;

}

}

BOOL CPicture::LoadPicture(LPCTSTR lpszResource, LPCTSTR lpszResType)

{

Release();

HINSTANCE hInst = AfxFindResourceHandle(lpszResource, lpszResType);

HRSRC hRsrc = ::FindResource(hInst, lpszResource, lpszResType);

if(hRsrc == NULL) return FALSE;

HGLOBAL hGlobal = LoadResource(hInst, hRsrc);

if(hGlobal == NULL) return FALSE;

DWORD dwSize = SizeofResource(hInst, hRsrc);

HGLOBAL hMem = ::GlobalAlloc(GMEM_MOVEABLE, dwSize);

if(hMem == NULL) return FALSE;

LPVOID pSrc = ::LockResource(hGlobal);

if(pSrc == NULL) {

::GlobalFree(hMem);

return FALSE;

}

LPVOID pDes = ::GlobalLock(hMem);

if(pDes == NULL){

//::GlobalUnlock(hGlobal);

::GlobalFree(hMem);

return FALSE;

}

memcpy(pDes, pSrc, dwSize);

//GlobalUnlock(hGlobal);

GlobalUnlock(hMem);

::FreeResource(hGlobal);

IStream* pStm = NULL;

CreateStreamOnHGlobal(hMem, TRUE, &pStm);

if(!SUCCEEDED(OleLoadPicture(pStm,dwSize,TRUE,IID_IPicture,(LPVOID*)&m_pPic)))

{

pStm -> Release();

::GlobalFree(hMem);

pStm = NULL;

return FALSE;

}

pStm->Release();

::GlobalFree(hMem);

CalcSize();

return TRUE;

}

BOOL CPicture::LoadPictureFromFile(LPCTSTR lpszFileName)

{

Release();

CFile file;

if(!file.Open(lpszFileName, CFile::modeRead))

return FALSE;

DWORD dwSize = file.GetLength();

HGLOBAL hMem = ::GlobalAlloc(GMEM_MOVEABLE, dwSize);

if(hMem == NULL) return FALSE;

LPVOID pDes = ::GlobalLock(hMem);

if(pDes == NULL){

::GlobalFree(hMem);

return FALSE;

}

file.ReadHuge(pDes, dwSize);

file.Close();

GlobalUnlock(hMem);

IStream* pStm = NULL;

CreateStreamOnHGlobal(hMem, TRUE, &pStm);

if(!SUCCEEDED(OleLoadPicture(pStm,dwSize,TRUE,IID_IPicture,(LPVOID*)&m_pPic)))

{

pStm -> Release();

::GlobalFree(hMem);

pStm = NULL;

return FALSE;

}

pStm->Release();

::GlobalFree(hMem);

CalcSize();

return TRUE;

}

void CPicture::CalcSize()

{

if(m_pPic == NULL) return;

m_pPic->get_Width(&_w_him);

m_pPic->get_Height(&_h_him);

CDC* pDC = CWnd::GetDesktopWindow()->GetDC();

m_size.cx = _w_him;

m_size.cy = _h_him;

pDC->HIMETRICtoDP(&m_size);

CWnd::GetDesktopWindow()->ReleaseDC(pDC);

}

void CPicture::Draw(CDC* pDC, LPCRECT lprcDest, LPCRECT lprcSrc)

{

if(m_pPic)

{

CSize szOrig(lprcSrc->left, lprcSrc->top);

CSize szSrc(lprcSrc->right - lprcSrc->left, lprcSrc->bottom - lprcSrc->top);

pDC->DPtoHIMETRIC(&szOrig);

pDC->DPtoHIMETRIC(&szSrc);

m_pPic->Render(*pDC, lprcDest->left,lprcDest->top,lprcDest->right-lprcDest->left,

lprcDest->bottom-lprcDest->top, szOrig.cx, _h_him-szOrig.cy, szSrc.cx,

-szSrc.cy, NULL);

}

}

void CPicture::Draw(CDC* pDC, int xDest,int yDest, int cxDest, int cyDest ,

int xSrc ,int ySrc ,int cxSrc ,int cySrc)

{

Draw(pDC, CRect(xDest, yDest, xDest+cxDest, yDest+cyDest), CRect(xSrc, ySrc, xSrc+cxSrc, ySrc+cySrc));

}

  • 上一篇:教師節主題班會有什麽互動小遊戲可以玩?
  • 下一篇:AR、VR、CR、MR都是什麽?
  • copyright 2024編程學習大全網