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 }