• 전체강좌

    IImage 로 이미지 회전, 밝기 조절하기

    twitter facebook

    안녕하세요? 착한이입니다.

    Windows CE 5.0 , Windows CE 6.0, Embedded Compact 7 에는

    기본적으로 IImage 라는 이미지 코덱을 포함하고 있습니다.

    BMP, JPEG, GIF, PNG 파일을 지원합니다.

    IImage 를 이용하면 이미지 회전 밝기 조절이 가능합니다.

    아래 코드를 참고 하시길 바랍니다.

    그럼 즐거운 개발하세요. ^^


    소스 코드는 없지만 아래 코드를 복사해서 사용하시면 되겠지요. ^^

     

    //코드 설명

    CoInitializeEx(NULL, COINIT_MULTITHREADED);  // COM 초기화 부분

    HDC hdc=::GetDC(GetSafeHwnd()); // 그려질 윈도위 DC를 얻음

     // Image loading
     IImagingFactory *pImagingFactory=NULL;
     // IImage 객체 포인터   

     IImage *pImage=NULL;

    // 이미지 파일 명 
    TCHAR *pImageFilename=L"\\Storage Card\\kms.png";

    // IImaingFactory 를 생성 합니다.

     hRet = CoCreateInstance(CLSID_ImagingFactory, NULL, CLSCTX_INPROC_SERVER, IID_IImagingFactory, (void**) &pImagingFactory);

    // 실패했다면 그냥 리턴 ^^

    if (FAILED(hRet)) return;

     // 이미지 파일에서 IImage 객체를 얻어 옵니다.
     hRet=pImagingFactory->CreateImageFromFile(pImageFilename,&pImage);
     if (FAILED(hRet)) return; // 실패 했으면 리턴

    // IBitmapImage 객체 포인터

     IBitmapImage *pBitmapImage=NULL;

     IBitmapImage *pNewBitmapImage=NULL;

    // IBasicBitmapOps 객체 포인터

     IBasicBitmapOps *pBasicBitmapOps = NULL;

    // IImage 에서 IBitmapImage 객체를 얻어 옵니다.

     pImagingFactory->CreateBitmapFromImage(pImage,0,0,PixelFormatDontCare,InterpolationHintDefault,&pNewBitmapImage);

    // IBitmapImage 에서 IBasicBitmapOps 객체를 얻어 옵니다.

     hRet = pNewBitmapImage->QueryInterface(IID_IBasicBitmapOps, (void**)(&pBasicBitmapOps));
    // 밝기를 10% 증가 시킵니다.    

     hRet= pBasicBitmapOps->AdjustBrightness(0.1);
    //이미지를 90도 회전 시키고 pBitmapImage 에 저장합니다.  
     hRet = pBasicBitmapOps->Rotate(90, InterpolationHintDefault, &BitmapImage);

    // IBasicBitmapOps 객체를 릴리즈 시켜줍니다.  

    pBasicBitmapOps->Release();

    // 회전한 이미지를 저장할 IImage 객체 포인터

     IImage *pNewImage=NULL;

    // IBitmapImage 에서 IImage 객체를 얻어 옵니다.
     hRet=pBitmapImage->QueryInterface(IID_IImage,(void **)&pNewImage);
    //IBitmapImage 를 삭제 합니다.    

    pBitmapImage->Release();

    pNewBitmapImage->Release();
       
    //이미지를 Draw 합니다.
     pNewImage->Draw(hdc,NULL,NULL);

    // IImage 객체를 삭제합니다.

     if(pNewImage) pNewImage->Release();

    if(pImage) pImage->Release();

    // ImagingFactory 객체를 삭제합니다.
     if(pImagingFactory) pImagingFactory->Release();

    //DC를 해제

    ::ReleaseDC(GetSafeHwnd(),hdc);

     

     

    IImage 로 이렇게 하면 이미지를 회전 시킬 수 있습니다. 또한 밝기 조절 contrast 등도 조절할 수 있습니다.

    수학적으로 계산해서 처리하는 것보다 더 간단하니 테스트 용으로 사용하시면 좋을 듯 합니다.

    단, IImage를 사용하실려면 지원되는지 확인하시는 것 잊지 마세요.

     

    그럼 좋은 하루 보내세요. ^^