다음을 통해 공유


IWICColorTransform::Initialize 메서드(wincodec.h)

IWICBitmapSource를 사용하여 IWICColorTransform을 초기화하고 한 IWICColorContext에서 다른 IWICColorContext로 변환합니다.

구문

HRESULT Initialize(
  [in] IWICBitmapSource      *pIBitmapSource,
  [in] IWICColorContext      *pIContextSource,
  [in] IWICColorContext      *pIContextDest,
  [in] REFWICPixelFormatGUID pixelFmtDest
);

매개 변수

[in] pIBitmapSource

형식: IWICBitmapSource*

색 변환을 초기화하는 데 사용되는 비트맵 소스입니다.

[in] pIContextSource

형식: IWICColorContext*

색 컨텍스트 원본입니다.

[in] pIContextDest

형식: IWICColorContext*

색 컨텍스트 대상입니다.

[in] pixelFmtDest

형식: REFWICPixelFormatGUID

원하는 픽셀 형식의 GUID입니다.

이 매개 변수는 네이티브 WIC 픽셀 형식의 하위 집합으로 제한됩니다. 목록에 대한 설명을 참조하세요.

반환 값

형식: HRESULT

메서드가 성공하면 S_OK를 반환하고, 그러지 않으면 HRESULT 오류 코드를 반환합니다.

설명

pIContextSourcepixelFmtDest 매개 변수에 대해 현재 지원되는 형식은 다음과 같습니다.

  • GUID_WICPixelFormat8bppGray
  • GUID_WICPixelFormat16bppGray
  • GUID_WICPixelFormat16bppBGR555
  • GUID_WICPixelFormat16bppBGR565
  • GUID_WICPixelFormat24bppBGR
  • GUID_WICPixelFormat24bppRGB
  • GUID_WICPixelFormat32bppBGR
  • GUID_WICPixelFormat32bppBGRA
  • GUID_WICPixelFormat32bppPBGRA
  • GUID_WICPixelFormat32bppPRGBA(Windows 8 이상)
  • GUID_WICPixelFormat32bppRGBA
  • GUID_WICPixelFormat32bppBGR101010
  • GUID_WICPixelFormat32bppCMYK
  • GUID_WICPixelFormat48bppBGR
  • GUID_WICPixelFormat64bppBGRA(Windows 8 이상)
  • GUID_WICPixelFormat64bppPBGRA(Windows 8 이상)
  • GUID_WICPixelFormat64bppPRGBA(Windows 8 이상)
  • GUID_WICPixelFormat64bppRGBA(Windows 8 이상)
색 변환에서 올바른 동작을 가져오려면 입력 및 출력 픽셀 형식이 원본 및 대상 색 프로필과 호환되어야 합니다. 예를 들어 SRGB 대상 색 프로필은 CMYK 대상 픽셀 형식과 함께 사용할 때 잘못된 결과를 생성합니다.

예제

다음 예제에서는 한 IWICColorContext에서 다른 IWICColorContext 로 색 변환을 수행합니다.


    IWICImagingFactory *pFactory = NULL;
    IWICBitmapDecoder *pDecoder = NULL;
    IWICBitmapFrameDecode *pBitmapFrame = NULL;
    IWICColorContext *pContextSrc = NULL;
    IWICColorContext *pContextDst = NULL;
    IWICColorTransform *pColorTransform = NULL;

    UINT uiFrameCount = 0;

    HRESULT hr = CoCreateInstance(
                    CLSID_WICImagingFactory,
                    NULL, CLSCTX_INPROC_SERVER,
                    IID_IWICImagingFactory,
                    (LPVOID*) &pFactory);

    if (SUCCEEDED(hr))
    {
        hr = pFactory->CreateDecoderFromFilename(
                           L"test.jpg",
                           NULL,
                           GENERIC_READ,
                           WICDecodeMetadataCacheOnDemand,
                           &pDecoder);
    }

    if (SUCCEEDED(hr))
    {
        hr = pDecoder->GetFrameCount(&uiFrameCount);
    }

    if (SUCCEEDED(hr) && (uiFrameCount > 0))
    {
        hr = pDecoder->GetFrame(0, &piBitmapFrame);
    }

    if (SUCCEEDED(hr))
    {
        hr = pFactory->CreateColorContext(&pContextSrc);
    }

    if (SUCCEEDED(hr))
    {
        hr = pContextSrc->InitializeFromFilename(
                              L"c:\\windows\\system32\\spool\\drivers\\color\\kodak_dc.icm");
    }

    if (SUCCEEDED(hr))
    {
        hr = pFactory->CreateColorContext(&pContextDst);
    }

    if (SUCCEEDED(hr))
    {
        hr = pContextDst->InitializeFromFilename(
                              L"c:\\windows\\system32\\spool\\drivers\\color\\sRGB Color Space Profile.icm");
    }

    hr = E_FAIL;

    if (SUCCEEDED(hr))
    {
        // Transform from src icm to the destination icm. 
        hr = pColorTransform->Initialize( pBitmapFrame,
                                          pContextSrc,
                                          pContextDst,
                                          GUID_WICPixelFormat32bppBGRA);
    }

    if (SUCCEEDED(hr))
    {
        UINT uiWidth = 0, uiHeight = 0;
        UINT cbStride = 0;
        UINT cbBufferSize = 0;
        BYTE *pbBuffer = NULL; 

        hr = pColorTransform->GetSize(&uiWidth, &uiHeight);

        if (SUCCEEDED(hr))
        {
            WICRect rc = { 0 };
            rc.X = 0;
            rc.Y = 0;
            rc.Width = uiWidth;
            rc.Height = 1; // scanline

            for (UINT i = 0; SUCCEEDED(hr) && (i < uiHeight); i++)
            {
                hr = pColorTransform->CopyPixels(&rc, cbStride, cbBufferSize - (rc.Y * cbStride), pbBuffer);
                pbBuffer += cbStride;
                rc.Y += 1;
            }
        }
    }

    if (pFactory)
    {
        pFactory->Release();
    }

    if (pDecoder)
    {
        pDecoder->Release();
    }

    if (pBitmapFrame)
    {
        pBitmapFrame->Release();
    }

    if (pContextSrc)
    {
        pContextSrc->Release();
    }

    if (pContextDst)
    {
        pContextDst->Release();
    }

    if (pColorTransform)
    {
        pColorTransform->Release();
    }

    return hr;

요구 사항

   
지원되는 최소 클라이언트 WINDOWS XP SP2, Windows Vista [데스크톱 앱 | UWP 앱]
지원되는 최소 서버 Windows Server 2008 [데스크톱 앱 | UWP 앱]
대상 플랫폼 Windows
헤더 wincodec.h
라이브러리 Windowscodecs.lib
DLL Windowscodecs.dll