1 module aurora.directx.wic; 2 3 import aurora.directx.com; 4 5 alias uint WICColor; 6 7 enum WICColorContextType : int { 8 Uninitialized = 0x00000000, 9 Profile = 0x00000001, 10 ExifColorSpace = 0x00000002 11 } 12 13 enum WICBitmapPaletteType : int { 14 Custom = 0x00000000, 15 MedianCut = 0x00000001, 16 FixedBW = 0x00000002, 17 FixedHalftone8 = 0x00000003, 18 FixedHalftone27 = 0x00000004, 19 FixedHalftone64 = 0x00000005, 20 FixedHalftone125 = 0x00000006, 21 FixedHalftone216 = 0x00000007, 22 FixedWebPalette = FixedHalftone216, 23 FixedHalftone252 = 0x00000008, 24 FixedHalftone256 = 0x00000009, 25 FixedGray4 = 0x0000000A, 26 FixedGray16 = 0x0000000B, 27 FixedGray256 = 0x0000000C 28 } 29 30 enum WICBitmapCreateCacheOption { 31 NoCache = 0x00000000, 32 CacheOnDemand = 0x00000001, 33 CacheOnLoad = 0x00000002 34 } 35 36 enum WICBitmapAlphaChannelOption { 37 UseAlpha = 0x00000000, 38 UsePremultipliedAlpha = 0x00000001, 39 IgnoreAlpha = 0x00000002, 40 ALPHACHANNELOPTIONS_FORCE_DWORD = 0xFFFFFFFF, 41 } 42 43 enum WICDecodeOptions { 44 MetadataCacheOnDemand = 0x00000000, 45 MetadataCacheOnLoad = 0x00000001 46 } 47 48 enum WICBitmapTransformOptions { 49 Rotate0 = 0x00000000, 50 Rotate90 = 0x00000001, 51 Rotate180 = 0x00000002, 52 Rotate270 = 0x00000003, 53 FlipHorizontal = 0x00000008, 54 FlipVertical = 0x00000010 55 } 56 57 enum WICBitmapInterpolationMode { 58 NearestNeighbor = 0x00000000, 59 Linear = 0x00000001, 60 Cubic = 0x00000002, 61 Fant = 0x00000003 62 } 63 64 enum WICComponentType { 65 Decoder = 0x00000001, 66 Encoder = 0x00000002, 67 PixelFormatConverter = 0x00000004, 68 MetadataReader = 0x00000008, 69 MetadataWriter = 0x00000010, 70 PixelFormat = 0x00000020, 71 AllComponents = 0x0000003F 72 } 73 74 enum WICComponentSigning { 75 Signed = 0x00000001, 76 Unsigned = 0x00000002, 77 Safe = 0x00000004, 78 Disabled = 0x80000000 79 } 80 81 enum WICBitmapDecoderCapabilities { 82 SameEncoder = 0x00000001, 83 CanDecodeAllImages = 0x00000002, 84 CanDecodeSomeImages = 0x00000004, 85 CanEnumerateMetadata = 0x00000008, 86 CanDecodeThumbnail = 0x00000010 87 } 88 89 enum WICBitmapEncoderCacheOption { 90 CacheInMemory = 0x00000000, 91 CacheTempFile = 0x00000001, 92 NoCache = 0x00000002 93 } 94 95 enum WICBitmapDitherType { 96 None = 0x00000000, 97 Solid = 0x00000000, 98 Ordered4x4 = 0x00000001, 99 Ordered8x8 = 0x00000002, 100 Ordered16x16 = 0x00000003, 101 Spiral4x4 = 0x00000004, 102 Spiral8x8 = 0x00000005, 103 DualSpiral4x4 = 0x00000006, 104 DualSpiral8x8 = 0x00000007, 105 ErrorDiffusion = 0x00000008 106 } 107 108 public struct WICRect 109 { 110 int X; 111 int Y; 112 int Width; 113 int Height; 114 } 115 116 public struct WICBitmapPattern { 117 ULARGE_INTEGER Position; 118 ulong Length; 119 ubyte *Pattern; 120 ubyte *Mask; 121 BOOL EndOfStream; 122 } 123 124 mixin(uuid!(IWICColorContext, "3C613A02-34B2-44ea-9A7C-45AEA9C6FD6D")); 125 public interface IWICColorContext : IUnknown 126 { 127 extern(Windows): 128 HRESULT GetExifColorSpace(uint *pValue); 129 HRESULT GetProfileBytes(uint cbBuffer, ubyte *pbBuffer, uint *pcbActual); 130 HRESULT GetType(WICColorContextType *pType); 131 HRESULT InitializeFromExifColorSpace(uint value); 132 HRESULT InitializeFromFilename(LPCWSTR wzFilename); 133 HRESULT InitializeFromMemory(const(ubyte) *pbBuffer, uint cbBufferSize); 134 } 135 136 mixin(uuid!(IWICPalette , "00000040-a8f2-4877-ba0a-fd2b6645fb94")); 137 public interface IWICPalette : IUnknown 138 { 139 extern(Windows): 140 HRESULT GetColorCount(uint *pcCount); 141 HRESULT GetColors(uint colorCount, WICColor *pColors, uint *pcActualColors); 142 HRESULT GetType(WICBitmapPaletteType *pePaletteType); 143 HRESULT HasAlpha(BOOL *pfHasAlpha); 144 HRESULT InitializeCustom(WICColor *pColors, uint colorCount); 145 HRESULT InitializeFromBitmap(IWICBitmapSource *pISurface, uint colorCount, BOOL fAddTransparentColor); 146 HRESULT InitializeFromPalette(IWICPalette *pIMILPalette); 147 HRESULT InitializePredefined(WICBitmapPaletteType ePaletteType, BOOL fAddTransparentColor); 148 HRESULT IsBlackWhite(BOOL *pfIsBlackWhite); 149 HRESULT IsGrayscale(BOOL *pfIsGrayscale); 150 } 151 152 mixin(uuid!(IWICBitmapLock, "00000123-a8f2-4877-ba0a-fd2b6645fb94")); 153 public interface IWICBitmapLock : IUnknown 154 { 155 extern(Windows): 156 HRESULT GetDataPointer(uint *pcbBufferSize, ubyte **ppbData); 157 HRESULT GetPixelFormat(GUID *pPixelFormat); 158 HRESULT GetSize(uint *pWidth, uint *pHeight); 159 HRESULT GetStride(uint *pcbStride); 160 } 161 162 mixin(uuid!(IWICBitmapSource, "00000120-a8f2-4877-ba0a-fd2b6645fb94")); 163 public interface IWICBitmapSource : IUnknown 164 { 165 extern(Windows): 166 HRESULT CopyPalette(IWICPalette pIPalette); 167 HRESULT CopyPixels(const WICRect *prc, uint cbStride, uint cbBufferSize, ubyte *pbBuffer); 168 HRESULT GetPixelFormat(GUID *pPixelFormat); 169 HRESULT GetResolution(double *pDpiX, double *pDpiY); 170 HRESULT GetSize(uint *puiWidth, uint *puiHeight); 171 } 172 173 mixin(uuid!(IWICBitmap, "00000121-a8f2-4877-ba0a-fd2b6645fb94")); 174 public interface IWICBitmap : IWICBitmapSource 175 { 176 extern(Windows): 177 HRESULT Lock(const WICRect *prcLock, DWORD flags, IWICBitmapLock **ppILock); 178 HRESULT SetPalette(IWICPalette pIPalette); 179 HRESULT SetResolution(double dpiX, double dpiY); 180 } 181 182 mixin(uuid!(IWICImagingFactory , "ec5ec8a9-c395-4314-9c77-54d7a935ff70")); 183 public interface IWICImagingFactory : IUnknown 184 { 185 extern(Windows): 186 HRESULT CreateBitmap(uint uiWidth, uint uiHeight, GUID* pixelFormat, WICBitmapCreateCacheOption option, IWICBitmap *ppIBitmap); 187 HRESULT CreateBitmapClipper(IWICBitmapClipper **ppIBitmapClipper); 188 HRESULT CreateBitmapFlipRotator(IWICBitmapFlipRotator **ppIBitmapFlipRotator); 189 HRESULT CreateBitmapFromHBITMAP(HBITMAP hBitmap, HPALETTE hPalette, WICBitmapAlphaChannelOption options, IWICBitmap *ppIBitmap); 190 HRESULT CreateBitmapFromHICON(HICON hIcon, IWICBitmap *ppIBitmap); 191 HRESULT CreateBitmapFromMemory(uint uiWidth, uint uiHeight, GUID pixelFormat, uint cbStride, uint cbBufferSize, ubyte *pbBuffer, IWICBitmap *ppIBitmap); 192 HRESULT CreateBitmapFromSource(IWICBitmapSource pIBitmapSource, WICBitmapCreateCacheOption option, IWICBitmap **ppIBitmap); 193 HRESULT CreateBitmapFromSourceRect(IWICBitmapSource pIBitmapSource, uint x, uint y, uint width, uint height, IWICBitmap *ppIBitmap); 194 HRESULT CreateBitmapScaler(IWICBitmapScaler *ppIBitmapScaler); 195 HRESULT CreateColorContext(IWICColorContext *ppIWICColorContext); 196 HRESULT CreateColorTransformer(IWICColorTransform *ppIWICColorTransform); 197 HRESULT CreateComponentEnumerator(DWORD componentTypes, DWORD options, IEnumUnknown *ppIEnumUnknown); 198 HRESULT CreateComponentInfo(CLSID* clsidComponent, IWICComponentInfo **ppIInfo); 199 HRESULT CreateDecoder(GUID* guidContainerFormat, const GUID *pguidVendor, IWICBitmapDecoder **ppIDecoder); 200 HRESULT CreateDecoderFromFileHandle(ulong* hFile, const GUID *pguidVendor, WICDecodeOptions metadataOptions, IWICBitmapDecoder *ppIDecoder); 201 HRESULT CreateDecoderFromFilename(LPCWSTR wzFilename, const GUID *pguidVendor, DWORD dwDesiredAccess, WICDecodeOptions metadataOptions, IWICBitmapDecoder *ppIDecoder); 202 HRESULT CreateDecoderFromStream(IStream *pIStream, const GUID *pguidVendor, WICDecodeOptions metadataOptions, IWICBitmapDecoder *ppIDecoder); 203 HRESULT CreateEncoder(GUID* guidContainerFormat, const GUID *pguidVendor, IWICBitmapEncoder *ppIEncoder); 204 HRESULT CreateFastMetadataEncoderFromDecoder(IWICBitmapDecoder pIDecoder, IWICFastMetadataEncoder *ppIFastEncoder); 205 HRESULT CreateFastMetadataEncoderFromFrameDecode(IWICBitmapFrameDecode pIFrameDecoder, IWICFastMetadataEncoder *ppIFastEncoder); 206 HRESULT CreateFormatConverter(IWICFormatConverter *ppIFormatConverter); 207 HRESULT CreatePalette(IWICPalette *ppIPalette); 208 HRESULT CreateQueryWriter(GUID* guidMetadataFormat, const GUID *pguidVendor, IWICMetadataQueryWriter *ppIQueryWriter); 209 HRESULT CreateQueryWriterFromReader(IWICMetadataQueryReader pIQueryReader, const GUID *pguidVendor, IWICMetadataQueryWriter *ppIQueryWriter); 210 HRESULT CreateStream(IWICStream *ppIWICStream); 211 } 212 213 mixin(uuid!(IWICBitmapClipper, "E4FBCF03-223D-4e81-9333-D635556DD1B5")); 214 public interface IWICBitmapClipper : IWICBitmapSource 215 { 216 extern(Windows): 217 HRESULT Initialize(IWICBitmapSource pISource, const WICRect *prc); 218 } 219 220 mixin(uuid!(IWICBitmapFlipRotator, "5009834F-2D6A-41ce-9E1B-17C5AFF7A782")); 221 public interface IWICBitmapFlipRotator : IWICBitmapSource 222 { 223 extern(Windows): 224 HRESULT Initialize(IWICBitmapSource pISource, WICBitmapTransformOptions options); 225 } 226 227 mixin(uuid!(IWICBitmapScaler, "00000302-a8f2-4877-ba0a-fd2b6645fb94")); 228 public interface IWICBitmapScaler : IWICBitmapSource 229 { 230 extern(Windows): 231 HRESULT Initialize(IWICBitmapSource *pISource, uint uiWidth, uint uiHeight, WICBitmapInterpolationMode mode); 232 } 233 234 mixin(uuid!(IWICColorTransform, "B66F034F-D0E2-40ab-B436-6DE39E321A94")); 235 public interface IWICColorTransform : IWICBitmapSource 236 { 237 extern(Windows): 238 HRESULT Initialize(IWICBitmapSource pIBitmapSource, IWICColorContext pIContextSource, IWICColorContext pIContextDest, GUID pixelFmtDest); 239 } 240 241 mixin(uuid!(IWICComponentInfo , "23BC3F0A-698B-4357-886B-F24D50671334")); 242 public interface IWICComponentInfo : IUnknown 243 { 244 extern(Windows): 245 HRESULT GetAuthor(uint cchAuthor, wchar *wzAuthor, uint *pcchActual); 246 HRESULT GetCLSID(CLSID *pclsid); 247 HRESULT GetComponentType(WICComponentType *pType); 248 HRESULT GetFriendlyName(uint cchFriendlyName, wchar *wzFriendlyName, uint *pcchActual); 249 HRESULT GetSigningStatus(DWORD *pStatus); 250 HRESULT GetSpecVersion(uint cchSpecVersion, wchar *wzSpecVersion, uint *pcchActual); 251 HRESULT GetVendorGUID(GUID *pguidVendor); 252 HRESULT GetVersion(uint cchVersion, wchar *wzVersion, uint *pcchActual); 253 } 254 255 mixin(uuid!(IWICBitmapDecoder , "9EDDE9E7-8DEE-47ea-99DF-E6FAF2ED44BF")); 256 public interface IWICBitmapDecoder : IUnknown 257 { 258 extern(Windows): 259 HRESULT CopyPalette(IWICPalette pIPalette); 260 HRESULT GetColorContexts(uint cCount, IWICColorContext *ppIColorContexts, uint *pcActualCount); 261 HRESULT GetContainerFormat(GUID *pguidContainerFormat); 262 HRESULT GetDecoderInfo(IWICBitmapDecoderInfo *ppIDecoderInfo); 263 HRESULT GetFrame(uint index, IWICBitmapFrameDecode *ppIBitmapFrame); 264 HRESULT GetFrameCount(uint *pCount); 265 HRESULT GetMetadataQueryReader(IWICMetadataQueryReader *ppIMetadataQueryReader); 266 HRESULT GetPreview(IWICBitmapSource *ppIBitmapSource); 267 HRESULT GetThumbnail(IWICBitmapSource *ppIThumbnail); 268 HRESULT Initialize(IStream *pIStream, WICDecodeOptions cacheOptions); 269 HRESULT QueryCapability(IStream *pIStream, DWORD *pdwCapability); 270 } 271 272 mixin(uuid!(IWICBitmapDecoderInfo, "D8CD007F-D08F-4191-9BFC-236EA7F0E4B5")); 273 public interface IWICBitmapDecoderInfo : IWICBitmapCodecInfo 274 { 275 extern(Windows): 276 HRESULT CreateInstance(IWICBitmapDecoder *ppIBitmapDecoder); 277 HRESULT GetPatterns(uint cbSizePatterns, WICBitmapPattern *pPatterns, uint *pcPatterns, uint *pcbPatternsActual); 278 HRESULT MatchesPattern(IStream *pIStream, BOOL *pfMatches); 279 } 280 281 mixin(uuid!(IWICBitmapCodecInfo , "E87A44C4-B76E-4c47-8B09-298EB12A2714")); 282 public interface IWICBitmapCodecInfo : IWICComponentInfo 283 { 284 extern(Windows): 285 HRESULT DoesSupportAnimation(BOOL *pfSupportAnimation); 286 HRESULT DoesSupportChromakey(BOOL *pfSupportChromakey); 287 HRESULT DoesSupportLossless(BOOL *pfSupportLossless); 288 HRESULT DoesSupportMultiframe(BOOL *pfSupportMultiframe); 289 HRESULT GetColorManagementVersion(uint cchColorManagementVersion, wchar *wzColorManagementVersion, uint *pcchActual); 290 HRESULT GetContainerFormat(GUID *pguidContainerFormat); 291 HRESULT GetDeviceManufacturer(uint cchDeviceManufacturer, wchar *wzDeviceManufacturer, uint *pcchActual); 292 HRESULT GetMetadataQueryReader(IWICMetadataQueryReader *ppIMetadataQueryReader); 293 HRESULT GetDeviceModels(uint cchDeviceModels, wchar *wzDeviceModels, uint *pcchActual); 294 HRESULT GetFileExtensions(uint cchFileExtensions, wchar *wzFileExtensions, uint *pcchActual); 295 HRESULT GetMimeTypes(uint cchMimeTypes, wchar *wzMimeTypes, uint *pcchActual); 296 HRESULT GetPixelFormats(uint cFormats, GUID *pguidPixelFormats, uint *pcActual); 297 HRESULT MatchesMimeType(LPCWSTR wzMimeType, BOOL *pfMatches); 298 } 299 300 mixin(uuid!(IWICBitmapFrameDecode, "3B16811B-6A43-4ec9-A813-3D930C13B940")); 301 public interface IWICBitmapFrameDecode : IWICBitmapSource 302 { 303 extern(Windows): 304 HRESULT GetColorContexts(uint cCount, IWICColorContext *ppIColorContexts, uint *pcActualCount); 305 HRESULT GetMetadataQueryReader(IWICMetadataQueryReader *ppIMetadataQueryReader); 306 HRESULT GetThumbnail(IWICBitmapSource *ppIThumbnail); 307 } 308 309 mixin(uuid!(IWICMetadataQueryReader, "30989668-E1C9-4597-B395-458EEDB808DF")); 310 public interface IWICMetadataQueryReader : IUnknown 311 { 312 extern(Windows): 313 HRESULT GetContainerFormat(GUID *pguidContainerFormat); 314 HRESULT GetEnumerator(IEnumString *ppIEnumString); 315 HRESULT GetLocation(uint cchMaxLength, wchar *wzNamespace, uint *pcchActualLength); 316 //PROPVARIANT Requires a complex binding, it can be done later 317 //HRESULT GetMetadataByName(LPCWSTR wzName, PROPVARIANT *pvarValue); 318 } 319 320 mixin(uuid!(IWICMetadataQueryWriter, "A721791A-0DEF-4d06-BD91-2118BF1DB10B")); 321 public interface IWICMetadataQueryWriter : IWICMetadataQueryReader 322 { 323 extern(Windows): 324 HRESULT RemoveMetadataByName(LPCWSTR wzName); 325 //PROPVARIANT Requires a complex binding, it can be done later 326 //HRESULT SetMetadataByName(LPCWSTR wzName, const PROPVARIANT *pvarValue); 327 } 328 329 mixin(uuid!(IWICBitmapEncoder, "00000103-a8f2-4877-ba0a-fd2b6645fb94")); 330 public interface IWICBitmapEncoder : IUnknown 331 { 332 extern(Windows): 333 HRESULT Commit(); 334 //IPropertyBag2 Requires a complex binding, it can be done later 335 //HRESULT CreateNewFrame(IWICBitmapFrameEncode *ppIFrameEncode, IPropertyBag2 **ppIEncoderOptions); 336 HRESULT GetContainerFormat(GUID *pguidContainerFormat); 337 HRESULT GetEncoderInfo(IWICBitmapEncoderInfo *ppIEncoderInfo); 338 HRESULT GetMetadataQueryWriter(IWICMetadataQueryWriter *ppIMetadataQueryWriter); 339 HRESULT Initialize(IStream *pIStream, WICBitmapEncoderCacheOption cacheOption); 340 HRESULT SetColorContexts(uint cCount, IWICColorContext *ppIColorContext); 341 HRESULT SetPalette(IWICPalette pIPalette); 342 HRESULT SetPreview(IWICBitmapSource pIPreview); 343 HRESULT SetThumbnail(IWICBitmapSource pIThumbnail); 344 } 345 346 mixin(uuid!(IWICBitmapEncoderInfo, "94C9B4EE-A09F-4f92-8A1E-4A9BCE7E76FB")); 347 public interface IWICBitmapEncoderInfo : IWICBitmapCodecInfo 348 { 349 extern(Windows): 350 HRESULT CreateInstance(IWICBitmapEncoder *ppIBitmapEncoder); 351 } 352 353 mixin(uuid!(IWICBitmapFrameEncode, "00000105-a8f2-4877-ba0a-fd2b6645fb94")); 354 public interface IWICBitmapFrameEncode : IUnknown 355 { 356 extern(Windows): 357 HRESULT Commit(); 358 HRESULT GetMetadataQueryWriter(IWICMetadataQueryWriter *ppIMetadataQueryWriter); 359 HRESULT Initialize(IStream *pIStream, WICBitmapEncoderCacheOption cacheOption); 360 HRESULT SetColorContexts(uint cCount, IWICColorContext *ppIColorContext); 361 HRESULT SetPalette(IWICPalette pIPalette); 362 HRESULT SetPixelFormat(GUID *pPixelFormat); 363 HRESULT SetResolution(double dpiX, double dpiY); 364 HRESULT SetSize(uint uiWidth, uint uiHeight); 365 HRESULT SetThumbnail(IWICBitmapSource pIThumbnail); 366 HRESULT WritePixels(uint lineCount, uint cbStride, uint cbBufferSize, ubyte *pbPixels); 367 HRESULT WriteSource(IWICBitmapSource pIBitmapSource, WICRect *prc); 368 } 369 370 mixin(uuid!(IWICFormatConverter, "00000301-a8f2-4877-ba0a-fd2b6645fb94")); 371 public interface IWICFormatConverter : IWICBitmapSource 372 { 373 extern(Windows): 374 HRESULT CanConvert(GUID srcPixelFormat, GUID dstPixelFormat, BOOL *pfCanConvert); 375 HRESULT Initialize(IWICBitmapSource pISource, GUID* dstFormat, WICBitmapDitherType dither, IWICPalette pIPalette, double alphaThresholdPercent, WICBitmapPaletteType paletteTranslate); 376 } 377 378 mixin(uuid!(IWICStream, "135FF860-22B7-4ddf-B0F6-218F4F299A43")); 379 public interface IWICStream : IStream 380 { 381 extern(Windows): 382 HRESULT InitializeFromFilename(LPCWSTR wzFileName, DWORD dwDesiredAccess); 383 HRESULT InitializeFromIStream(IStream *pIStream); 384 HRESULT InitializeFromIStreamRegion(IStream *pIStream, ULARGE_INTEGER ulOffset, ULARGE_INTEGER ulMaxSize); 385 HRESULT InitializeFromMemory(ubyte *pbBuffer, DWORD cbBufferSize); 386 } 387 388 mixin(uuid!(IWICFastMetadataEncoder, "B84E2C09-78C9-4AC4-8BD3-524AE1663A2F")); 389 public interface IWICFastMetadataEncoder : IUnknown 390 { 391 extern(Windows): 392 HRESULT Commit(); 393 HRESULT GetMetadataQueryWriter(IWICMetadataQueryWriter *ppIMetadataQueryWriter); 394 }