From 7ba4a6504f51831ea9faa0b04ee8a0a6a4401688 Mon Sep 17 00:00:00 2001 From: walbourn_cp Date: Thu, 11 Sep 2014 15:32:07 -0700 Subject: [PATCH] Added explicit test of CanConvert for all use of IWICFormatConverter --- ScreenGrab/ScreenGrab.cpp | 7 +++++++ WICTextureLoader/WICTextureLoader.cpp | 14 ++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/ScreenGrab/ScreenGrab.cpp b/ScreenGrab/ScreenGrab.cpp index 685e2ff..82a2bb8 100644 --- a/ScreenGrab/ScreenGrab.cpp +++ b/ScreenGrab/ScreenGrab.cpp @@ -1111,6 +1111,13 @@ HRESULT DirectX::SaveWICTextureToFile( _In_ ID3D11DeviceContext* pContext, return hr; } + BOOL canConvert = FALSE; + hr = FC->CanConvert( pfGuid, targetGuid, &canConvert ); + if ( FAILED(hr) || !canConvert ) + { + return E_UNEXPECTED; + } + hr = FC->Initialize( source.Get(), targetGuid, WICBitmapDitherTypeNone, 0, 0, WICBitmapPaletteTypeCustom ); if ( FAILED(hr) ) { diff --git a/WICTextureLoader/WICTextureLoader.cpp b/WICTextureLoader/WICTextureLoader.cpp index bb9b53f..040398a 100644 --- a/WICTextureLoader/WICTextureLoader.cpp +++ b/WICTextureLoader/WICTextureLoader.cpp @@ -554,6 +554,13 @@ static HRESULT CreateTextureFromWIC( _In_ ID3D11Device* d3dDevice, if ( FAILED(hr) ) return hr; + BOOL canConvert = FALSE; + hr = FC->CanConvert( pfScaler, convertGUID, &canConvert ); + if ( FAILED(hr) || !canConvert ) + { + return E_UNEXPECTED; + } + hr = FC->Initialize( scaler.Get(), convertGUID, WICBitmapDitherTypeErrorDiffusion, 0, 0, WICBitmapPaletteTypeCustom ); if ( FAILED(hr) ) return hr; @@ -575,6 +582,13 @@ static HRESULT CreateTextureFromWIC( _In_ ID3D11Device* d3dDevice, if ( FAILED(hr) ) return hr; + BOOL canConvert = FALSE; + hr = FC->CanConvert( pixelFormat, convertGUID, &canConvert ); + if ( FAILED(hr) || !canConvert ) + { + return E_UNEXPECTED; + } + hr = FC->Initialize( frame, convertGUID, WICBitmapDitherTypeErrorDiffusion, 0, 0, WICBitmapPaletteTypeCustom ); if ( FAILED(hr) ) return hr;