참 쉽죠이잉 ~
wince5.0에서 10분이면 되는걸... !!
일 할때는 다른 사람의 경험을 존중하며 가장 손쉬운 방법을 찾는걸 우선 해야 할 것입니다.
고민 할껀 고민 해야겠죠
Windows CE 5.0이상에서 지원, Imaging관련 컴포넌트가 포함된 경우에만 동작
확인은 dll이 있는지 확인 해봐야함
기본적으로 지원하는 포맷은 jpg, png, gif, bmp 등이 있고 multiframe image(ani-gif)도 가능하며, 유저 코덱을 추가하면 다른 포맷도 사용 가능합니다.인코딩, 디코딩 가능하며, contrast, brightness, flip, clone, resize, rotate 등도 가능
일전 이미지 편집 프로그램을 windows mobile 5.0에서 간단한 이미지 편집 프로그램
작성시 해당 컴포넌트 이용, Thumnail 엔진도 이용함.
자세한 사항은 MSDN에서 http://msdn.microsoft.com/en-gb/library/ms932606.aspx 확인
1. 헤더, 라이브러리 추가
#include <initguid.h>
#include <imaging.h>
#pragma comment (lib, "Ole32.lib")
2. ImagingAPI를 사용하기 전후로 다음 함수 호출합니다.
이유는 COM을 사용하기 때문이죠. 프로그램 시작/종료시에 한번만 호출 합니다.
// 프로그램 시작부분에서 호출.
HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
// 프로그램 종료부분에서 호출..
CoUninitialize();
3. 이미지파일을 읽어와서, hdc의 rcDest 영역에 display sample function
void DrawImageFile(HDC hdc, TCHAR* szFileName, RECT* prcDest)
{
HRESULT hr;
IImage *pImage = NULL;
IImagingFactory *pImagingFactory = NULL;
hr = CoCreateInstance(CLSID_ImagingFactory,
NULL,
CLSCTX_INPROC_SERVER,
IID_IImagingFactory,
(void**) &pImagingFactory);
if( FAILED(hr) ) {
goto finish;
}
hr = pImagingFactory->CreateImageFromFile( szFileName, &pImage );
if (FAILED(hr) || NULL == pImage) {
goto finish;
}
pImage->Draw( hdc, prcDest, NULL );
finish:
if (pImage) {
pImage->Release();
pImage = NULL;
}
if (pImagingFactory) {
pImagingFactory->Release();
pImagingFactory = NULL;
}
}
4. draw....
win32 api를 이용시...
HDC hdc;
PAINTSTRUCT ps;
hdc = BeginPaint(hWnd, &ps);
// 이미지가 보일 좌표
RECT rectDest= {0,0,200,200};
DrawImageFile(hdc, L"\\test.jpg", &rectDest);
EndPaint(hWnd, &ps);
iimage도 잘 이용하면 더블버퍼링 처리가 가능 합니다.
hdc에 바로 그리지 말고, mem dc에 그린 후 hdc로 옮겨 그리면,
깜빡임 현상들을 제거 할 수 있습니다.
일단 샘플이니 간단하게 사용 해보셔요.