18 using Microsoft::WRL::ComPtr;
27 _In_
const WICPixelFormatGUID& pfGUID, _In_
const Image& destImage )
29 if ( !srcImage.pixels || !destImage.pixels )
32 assert( srcImage.format == destImage.format );
34 IWICImagingFactory* pWIC =
_GetWIC();
38 ComPtr<IWICBitmap> source;
39 HRESULT hr = pWIC->CreateBitmapFromMemory( static_cast<UINT>( srcImage.width ), static_cast<UINT>( srcImage.height ), pfGUID,
40 static_cast<UINT>( srcImage.rowPitch ), static_cast<UINT>( srcImage.slicePitch ),
41 srcImage.pixels, source.GetAddressOf() );
45 ComPtr<IWICBitmapFlipRotator> FR;
46 hr = pWIC->CreateBitmapFlipRotator( FR.GetAddressOf() );
50 hr = FR->Initialize( source.Get(),
static_cast<WICBitmapTransformOptions
>(
flags ) );
54 WICPixelFormatGUID pfFR;
55 hr = FR->GetPixelFormat( &pfFR );
59 if ( memcmp( &pfFR, &pfGUID,
sizeof(GUID) ) != 0 )
62 return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED );
66 hr = FR->GetSize( &nwidth, &nheight );
70 if ( destImage.width != nwidth || destImage.height != nheight )
73 hr = FR->CopyPixels( 0, static_cast<UINT>( destImage.rowPitch ), static_cast<UINT>( destImage.slicePitch ), destImage.pixels );
86 if ( !srcImage.pixels || !destImage.pixels )
89 assert( srcImage.format != DXGI_FORMAT_R32G32B32A32_FLOAT );
90 assert( srcImage.format == destImage.format );
102 hr = rtemp.
Initialize2D( DXGI_FORMAT_R32G32B32A32_FLOAT, destImage.width, destImage.height, 1, 1 );
131 _Use_decl_annotations_
141 if ( (srcImage.
width > 0xFFFFFFFF) || (srcImage.
height > 0xFFFFFFFF) )
148 return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED );
151 static_assert(
TEX_FR_ROTATE0 == WICBitmapTransformRotate0,
"TEX_FR_ROTATE0 no longer matches WIC" );
152 static_assert(
TEX_FR_ROTATE90 == WICBitmapTransformRotate90,
"TEX_FR_ROTATE90 no longer matches WIC" );
153 static_assert(
TEX_FR_ROTATE180 == WICBitmapTransformRotate180,
"TEX_FR_ROTATE180 no longer matches WIC" );
154 static_assert(
TEX_FR_ROTATE270 == WICBitmapTransformRotate270,
"TEX_FR_ROTATE270 no longer matches WIC" );
155 static_assert(
TEX_FR_FLIP_HORIZONTAL == WICBitmapTransformFlipHorizontal,
"TEX_FR_FLIP_HORIZONTAL no longer matches WIC" );
156 static_assert(
TEX_FR_FLIP_VERTICAL == WICBitmapTransformFlipVertical,
"TEX_FR_FLIP_VERTICAL no longer matches WIC" );
171 size_t nwidth = srcImage.
width;
172 size_t nheight = srcImage.
height;
177 nheight = srcImage.
width;
188 WICPixelFormatGUID pfGUID;
213 _Use_decl_annotations_
217 if ( !srcImages || !nimages )
223 return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED );
226 static_assert(
TEX_FR_ROTATE0 == WICBitmapTransformRotate0,
"TEX_FR_ROTATE0 no longer matches WIC" );
227 static_assert(
TEX_FR_ROTATE90 == WICBitmapTransformRotate90,
"TEX_FR_ROTATE90 no longer matches WIC" );
228 static_assert(
TEX_FR_ROTATE180 == WICBitmapTransformRotate180,
"TEX_FR_ROTATE180 no longer matches WIC" );
229 static_assert(
TEX_FR_ROTATE270 == WICBitmapTransformRotate270,
"TEX_FR_ROTATE270 no longer matches WIC" );
230 static_assert(
TEX_FR_FLIP_HORIZONTAL == WICBitmapTransformFlipHorizontal,
"TEX_FR_FLIP_HORIZONTAL no longer matches WIC" );
231 static_assert(
TEX_FR_FLIP_VERTICAL == WICBitmapTransformFlipVertical,
"TEX_FR_FLIP_VERTICAL no longer matches WIC" );
273 WICPixelFormatGUID pfGUID;
276 for(
size_t index=0; index < nimages; ++index )
278 const Image& src = srcImages[ index ];
286 if ( (src.
width > 0xFFFFFFFF) || (src.
height > 0xFFFFFFFF) )
290 const Image& dst = dest[ index ];
const Image * GetImage(_In_ size_t mip, _In_ size_t item, _In_ size_t slice) const
_In_ size_t _In_ DXGI_FORMAT _In_ size_t _In_ DXGI_FORMAT _In_ DWORD flags
_Use_decl_annotations_ HRESULT _ConvertFromR32G32B32A32(const Image &srcImage, const Image &destImage)
_Use_decl_annotations_ HRESULT _ConvertToR32G32B32A32(const Image &srcImage, ScratchImage &image)
size_t _In_ DXGI_FORMAT size_t _In_ TEXP_LEGACY_FORMAT _In_ DWORD flags assert(pDestination &&outSize > 0)
HRESULT FlipRotate(_In_ const Image &srcImage, _In_ DWORD flags, _Out_ ScratchImage &image)
HRESULT Initialize(_In_ const TexMetadata &mdata, _In_ DWORD flags=CP_FLAGS_NONE)
static HRESULT _PerformFlipRotateUsingWIC(_In_ const Image &srcImage, _In_ DWORD flags, _In_ const WICPixelFormatGUID &pfGUID, _In_ const Image &destImage)
HRESULT Initialize2D(_In_ DXGI_FORMAT fmt, _In_ size_t width, _In_ size_t height, _In_ size_t arraySize, _In_ size_t mipLevels, _In_ DWORD flags=CP_FLAGS_NONE)
static HRESULT _PerformFlipRotateViaF32(_In_ const Image &srcImage, _In_ DWORD flags, _In_ const Image &destImage)
IWICImagingFactory * _GetWIC()
bool IsCompressed(_In_ DXGI_FORMAT fmt)
size_t GetImageCount() const
_In_ size_t _In_ const TexMetadata & metadata
const Image * GetImages() const
bool _DXGIToWIC(_In_ DXGI_FORMAT format, _Out_ GUID &guid, _In_ bool ignoreRGBvsBGR=false)