PPC中显示bmp, png, jpg, 图片

VS2005 + widows mobile 5.0 ppc win32项目

 第一种方法

一、头文件

/******************************************************************** * Name: Image_C.h * Creater: Yunhong Mi * Date: 2009-09-23 * Summary: 图片类 * Note: ********************************************************************/ #pragma once #include "stdafx.h" interface IImagingFactory; interface IImage; class CImage_C { public: CImage_C() : m_pImageFactory(NULL), m_pImage(NULL) { } ~CImage_C(); public: HRESULT Initial(); HRESULT CreateImage(const TCHAR *filename); HRESULT ShowImage( const HDC pDc, const RECT *pdesRect, const RECT *psrcRect=NULL); private: IImagingFactory *m_pImageFactory; IImage *m_pImage; };

 

二、实现文件

/******************************************************************** * Name: Image_C.cpp * Creater: Yunhong Mi * Date: 2009-09-23 * Summary: 图片类 * Note: ********************************************************************/ // #include "Image_C.h" // #include <initguid.h> 要在 #include <Imaging.h>前面,否则编译不过 #include <initguid.h> #include <Imaging.h> #pragma comment(lib, "Imaging.lib") CImage_C::~CImage_C() { if(m_pImage != NULL) { m_pImage->Release(); m_pImage = NULL; } if(m_pImageFactory != NULL) { m_pImageFactory->Release(); m_pImageFactory = NULL; } CoUninitialize(); } HRESULT CImage_C::Initial() { HRESULT hr = S_FALSE; if (FAILED(hr = CoInitializeEx(NULL, COINIT_MULTITHREADED))) { return hr; } hr = CoCreateInstance(CLSID_ImagingFactory,NULL, CLSCTX_INPROC_SERVER,IID_IImagingFactory,(void**) &m_pImageFactory); return hr; } HRESULT CImage_C::CreateImage(const TCHAR *filename) { HRESULT hr = S_FALSE; if(NULL != m_pImage ) { m_pImage->Release(); m_pImage = NULL; } if (NULL != m_pImageFactory) { hr = m_pImageFactory->CreateImageFromFile(filename, &m_pImage); } return hr; } HRESULT CImage_C::ShowImage( const HDC pDc, const RECT *pdesRect, const RECT *psrcRect) { HRESULT hr = S_FALSE; if(NULL != m_pImage) { hr = m_pImage->Draw( pDc, pdesRect, psrcRect ); } return hr; }

 

三、试验

#include "Image_C.h" void OnPaint(HDC hdc) { RECT rect = {10, 10, 220, 200}; //RECT rect2 = {0, 0, 5000, 5000}; CImage_C image; if (S_OK == image.Initial()) { if (S_OK ==image.CreateImage(TEXT("//storage card//2.png"))) { image.ShowImage(hdc, &rect); } } }

 

 第二种方法

#include <Aygshell.h> #pragma comment(lib, "Aygshell.lib") void OnPaint(HDC hdc) { HDC dcMem = CreateCompatibleDC(hdc); BITMAP bitmap; RECT rect = {10, 10, 220, 200}; HBITMAP hbitmap = SHLoadImageFile(TEXT("//storage card//1.png")); GetObject(hbitmap, sizeof(BITMAP), &bitmap); HBITMAP oldbmp = (HBITMAP)SelectObject(dcMem, hbitmap); BitBlt(hdc, 0,0, bitmap.bmWidth-50,bitmap.bmHeight-40, dcMem,0,0, SRCCOPY); SelectObject(dcMem, oldbmp); DeleteDC(dcMem); }

 

 

 

你可能感兴趣的:(PPC中显示bmp, png, jpg, 图片)