Función WICConvertBitmapSource (wincodec.h)
Obtiene un IWICBitmapSource en el formato de píxel deseado de un objeto IWICBitmapSource determinado.
Sintaxis
HRESULT WICConvertBitmapSource(
[in] REFWICPixelFormatGUID dstFormat,
[in] IWICBitmapSource *pISrc,
[out] IWICBitmapSource **ppIDst
);
Parámetros
[in] dstFormat
Tipo: REFWICPixelFormatGUID
Formato de píxel al que se va a convertir.
[in] pISrc
Tipo: IWICBitmapSource*
Mapa de bits de origen.
[out] ppIDst
Tipo: IWICBitmapSource**
Puntero al puntero de mapa de bits de destino inicializado en null.
Valor devuelto
Tipo: HRESULT
Si esta función se realiza correctamente, devuelve S_OK. De lo contrario, devuelve un código de error de HRESULT.
Comentarios
Si el mapa de bits pISrc ya está en el formato deseado, pISrc se copia en el puntero de mapa de bits de destino y se agrega una referencia. Sin embargo, si no está en el formato deseado, WICConvertBitmapSource creará una instancia de un convertidor de formato dstFormat e lo inicializará con pISrc.
Ejemplos
En el ejemplo siguiente se convierte un IWICBitmapSource en un formato de píxel GUID_WICPixelFormat128bppPRGBAFloat .
IWICImagingFactory *pFactory = NULL;
IWICBitmapDecoder *pDecoder = NULL;
IWICBitmapFrameDecode *pBitmapFrameDecode = NULL;
IWICBitmapSource *pConverter = NULL;
UINT uiFrameCount = 0;
UINT uiWidth = 0, uiHeight = 0;
WICPixelFormatGUID pixelFormat;
// Create the image factory.
HRESULT hr = CoCreateInstance(CLSID_WICImagingFactory,
NULL,
CLSCTX_INPROC_SERVER,
IID_IWICImagingFactory,
(LPVOID*) &pFactory);
// Create a decoder from the file.
if (SUCCEEDED(hr))
{
hr = pFactory->CreateDecoderFromFilename(L"test.jpg",
NULL,
GENERIC_READ,
WICDecodeMetadataCacheOnDemand,
&pDecoder);
}
// Get the frame count.
if (SUCCEEDED(hr))
{
hr = pDecoder->GetFrameCount(&uiFrameCount);
}
if (SUCCEEDED(hr) && (uiFrameCount > 0))
{
IWICBitmapSource *pSource = NULL;
hr = pDecoder->GetFrame(0, &pBitmapFrameDecode);
if (SUCCEEDED(hr))
{
pSource = pBitmapFrameDecode;
pSource->AddRef();
hr = pSource->GetSize(&uiWidth, &uiHeight);
}
if (SUCCEEDED(hr))
{
hr = pSource->GetPixelFormat(&pixelFormat);
}
if (SUCCEEDED(hr))
{
if (!IsEqualGUID(pixelFormat, GUID_WICPixelFormat128bppPRGBAFloat))
{
hr = WICConvertBitmapSource(GUID_WICPixelFormat128bppPRGBAFloat, pSource, &pConverter);
if (SUCCEEDED(hr))
{
pSource->Release(); // the converter has a reference to the source
pSource = NULL; // so we don't need it anymore.
pSource = pConverter; // let's treat the 128bppPABGR converter as the source
}
}
if (piConverter)
{
UINT cbStride = uiWidth * sizeof(float) * 4;
UINT cbBufferSize = cbStride;
float *pixels = new float[cbBufferSize / sizeof(float)];
if (pixels)
{
WICRect rc;
rc.X = 0;
rc.Y = 0;
rc.Width = uiWidth;
rc.Height = 1;
for (UINT i = 0; SUCCEEDED(hr) && i < uiHeight; i++)
{
hr = pSource->CopyPixels(&rc,
cbStride,
cbBufferSize,
reinterpret_cast<BYTE*>(pixels));
// Do something with the scanline here...
rc.Y++;
}
delete[] pixels;
}
else
{
hr = E_OUTOFMEMORY;
}
pConverter->Release();
}
}
}
if (pBitmapFrameDecode)
{
pBitmapFrameDecode->Release();
}
if (pDecoder)
{
pDecoder->Release();
}
if (pFactory)
{
pFactory->Release();
}
return hr;
Requisitos
Requisito | Value |
---|---|
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 |