Método IWICColorTransform::Initialize (wincodec.h)

Inicializa un IWICColorTransform con un IWICBitmapSource y lo transforma de un IWICColorContext a otro.

Sintaxis

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

Parámetros

[in] pIBitmapSource

Tipo: IWICBitmapSource*

Origen del mapa de bits usado para inicializar la transformación de color.

[in] pIContextSource

Tipo: IWICColorContext*

Origen del contexto de color.

[in] pIContextDest

Tipo: IWICColorContext*

Destino del contexto de color.

[in] pixelFmtDest

Tipo: REFWICPixelFormatGUID

GUID del formato de píxel deseado.

Este parámetro se limita a un subconjunto de los formatos de píxeles WIC nativos, consulte Comentarios para obtener una lista.

Valor devuelto

Tipo: HRESULT

Si este método se realiza correctamente, devuelve S_OK. De lo contrario, devuelve un código de error de HRESULT.

Comentarios

Los formatos admitidos actualmente para los parámetros pIContextSource y pixelFmtDest son:

  • GUID_WICPixelFormat8bppGray
  • GUID_WICPixelFormat16bppGray
  • GUID_WICPixelFormat16bppBGR555
  • GUID_WICPixelFormat16bppBGR565
  • GUID_WICPixelFormat24bppBGR
  • GUID_WICPixelFormat24bppRGB
  • GUID_WICPixelFormat32bppBGR
  • GUID_WICPixelFormat32bppBGRA
  • GUID_WICPixelFormat32bppPBGRA
  • GUID_WICPixelFormat32bppPRGBA (Windows 8 y versiones posteriores)
  • GUID_WICPixelFormat32bppRGBA
  • GUID_WICPixelFormat32bppBGR101010
  • GUID_WICPixelFormat32bppCMYK
  • GUID_WICPixelFormat48bppBGR
  • GUID_WICPixelFormat64bppBGRA (Windows 8 y versiones posteriores)
  • GUID_WICPixelFormat64bppPBGRA (Windows 8 y versiones posteriores)
  • GUID_WICPixelFormat64bppPRGBA (Windows 8 y versiones posteriores)
  • GUID_WICPixelFormat64bppRGBA (Windows 8 y versiones posteriores)
Para obtener un comportamiento correcto de una transformación de color, los formatos de píxeles de entrada y salida deben ser compatibles con los perfiles de color de origen y destino. Por ejemplo, un perfil de color de destino sRGB generará resultados incorrectos cuando se use con un formato de píxel de destino CMYK.

Ejemplos

En el ejemplo siguiente se realiza una transformación de color de un IWICColorContext a otro.


    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;

Requisitos

   
Cliente mínimo compatible Windows XP con SP2, Windows Vista [aplicaciones de escritorio | Aplicaciones para UWP]
Servidor mínimo compatible Windows Server 2008 [aplicaciones de escritorio | aplicaciones para UWP]
Plataforma de destino Windows
Encabezado wincodec.h
Library Windowscodecs.lib
Archivo DLL Windowscodecs.dll