winapi_ui_automation/um/
wincodec.rs

1// Licensed under the Apache License, Version 2.0
2// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
3// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
4// All files in the project carrying such notice may not be copied, modified, or distributed
5// except according to those terms.
6//! Mappings for the contents of wincodec.h
7use ctypes::c_double;
8use shared::basetsd::{UINT32, ULONG_PTR};
9use shared::dxgiformat::DXGI_FORMAT;
10use shared::dxgitype::{
11    DXGI_JPEG_AC_HUFFMAN_TABLE, DXGI_JPEG_DC_HUFFMAN_TABLE,
12    DXGI_JPEG_QUANTIZATION_TABLE
13};
14use shared::guiddef::{CLSID, GUID, REFCLSID, REFGUID};
15use shared::minwindef::{BOOL, BYTE, DWORD, FLOAT, INT, LPVOID, UINT, ULONG};
16use shared::ntdef::{LPCWSTR, LPWSTR, PCWSTR, WCHAR};
17use shared::windef::{HBITMAP, HICON, HPALETTE};
18use shared::winerror::{
19    E_ABORT, E_ACCESSDENIED, E_FAIL, E_INVALIDARG, E_NOTIMPL, E_OUTOFMEMORY, HRESULT,
20    SEVERITY_ERROR
21};
22use um::d2d1::ID2D1Image;
23use um::d2d1_1::ID2D1Device;
24use um::dcommon::D2D1_PIXEL_FORMAT;
25use um::objidlbase::{IEnumString, IEnumUnknown, IStream, IStreamVtbl};
26use um::ocidl::IPropertyBag2;
27use um::propidl::PROPVARIANT;
28use um::unknwnbase::{IUnknown, IUnknownVtbl};
29use um::winnt::{HANDLE, ULARGE_INTEGER};
30DEFINE_GUID!{CLSID_WICImagingFactory,
31    0xcacaf262, 0x9370, 0x4615, 0xa1, 0x3b, 0x9f, 0x55, 0x39, 0xda, 0x4c, 0xa}
32DEFINE_GUID!{CLSID_WICImagingFactory1,
33    0xcacaf262, 0x9370, 0x4615, 0xa1, 0x3b, 0x9f, 0x55, 0x39, 0xda, 0x4c, 0xa}
34DEFINE_GUID!{CLSID_WICImagingFactory2,
35    0x317d06e8, 0x5f24, 0x433d, 0xbd, 0xf7, 0x79, 0xce, 0x68, 0xd8, 0xab, 0xc2}
36DEFINE_GUID!{GUID_VendorMicrosoft,
37    0xf0e749ca, 0xedef, 0x4589, 0xa7, 0x3a, 0xee, 0xe, 0x62, 0x6a, 0x2a, 0x2b}
38DEFINE_GUID!{GUID_VendorMicrosoftBuiltIn,
39    0x257a30fd, 0x6b6, 0x462b, 0xae, 0xa4, 0x63, 0xf7, 0xb, 0x86, 0xe5, 0x33}
40DEFINE_GUID!{CLSID_WICPngDecoder,
41    0x389ea17b, 0x5078, 0x4cde, 0xb6, 0xef, 0x25, 0xc1, 0x51, 0x75, 0xc7, 0x51}
42DEFINE_GUID!{CLSID_WICPngDecoder1,
43    0x389ea17b, 0x5078, 0x4cde, 0xb6, 0xef, 0x25, 0xc1, 0x51, 0x75, 0xc7, 0x51}
44DEFINE_GUID!{CLSID_WICPngDecoder2,
45    0xe018945b, 0xaa86, 0x4008, 0x9b, 0xd4, 0x67, 0x77, 0xa1, 0xe4, 0x0c, 0x11}
46DEFINE_GUID!{CLSID_WICBmpDecoder,
47    0x6b462062, 0x7cbf, 0x400d, 0x9f, 0xdb, 0x81, 0x3d, 0xd1, 0x0f, 0x27, 0x78}
48DEFINE_GUID!{CLSID_WICIcoDecoder,
49    0xc61bfcdf, 0x2e0f, 0x4aad, 0xa8, 0xd7, 0xe0, 0x6b, 0xaf, 0xeb, 0xcd, 0xfe}
50DEFINE_GUID!{CLSID_WICJpegDecoder,
51    0x9456a480, 0xe88b, 0x43ea, 0x9e, 0x73, 0x0b, 0x2d, 0x9b, 0x71, 0xb1, 0xca}
52DEFINE_GUID!{CLSID_WICGifDecoder,
53    0x381dda3c, 0x9ce9, 0x4834, 0xa2, 0x3e, 0x1f, 0x98, 0xf8, 0xfc, 0x52, 0xbe}
54DEFINE_GUID!{CLSID_WICTiffDecoder,
55    0xb54e85d9, 0xfe23, 0x499f, 0x8b, 0x88, 0x6a, 0xce, 0xa7, 0x13, 0x75, 0x2b}
56DEFINE_GUID!{CLSID_WICWmpDecoder,
57    0xa26cec36, 0x234c, 0x4950, 0xae, 0x16, 0xe3, 0x4a, 0xac, 0xe7, 0x1d, 0x0d}
58DEFINE_GUID!{CLSID_WICDdsDecoder,
59    0x9053699f, 0xa341, 0x429d, 0x9e, 0x90, 0xee, 0x43, 0x7c, 0xf8, 0x0c, 0x73}
60DEFINE_GUID!{CLSID_WICBmpEncoder,
61    0x69be8bb4, 0xd66d, 0x47c8, 0x86, 0x5a, 0xed, 0x15, 0x89, 0x43, 0x37, 0x82}
62DEFINE_GUID!{CLSID_WICPngEncoder,
63    0x27949969, 0x876a, 0x41d7, 0x94, 0x47, 0x56, 0x8f, 0x6a, 0x35, 0xa4, 0xdc}
64DEFINE_GUID!{CLSID_WICJpegEncoder,
65    0x1a34f5c1, 0x4a5a, 0x46dc, 0xb6, 0x44, 0x1f, 0x45, 0x67, 0xe7, 0xa6, 0x76}
66DEFINE_GUID!{CLSID_WICGifEncoder,
67    0x114f5598, 0x0b22, 0x40a0, 0x86, 0xa1, 0xc8, 0x3e, 0xa4, 0x95, 0xad, 0xbd}
68DEFINE_GUID!{CLSID_WICTiffEncoder,
69    0x0131be10, 0x2001, 0x4c5f, 0xa9, 0xb0, 0xcc, 0x88, 0xfa, 0xb6, 0x4c, 0xe8}
70DEFINE_GUID!{CLSID_WICWmpEncoder,
71    0xac4ce3cb, 0xe1c1, 0x44cd, 0x82, 0x15, 0x5a, 0x16, 0x65, 0x50, 0x9e, 0xc2}
72DEFINE_GUID!{CLSID_WICDdsEncoder,
73    0xa61dde94, 0x66ce, 0x4ac1, 0x88, 0x1b, 0x71, 0x68, 0x05, 0x88, 0x89, 0x5e}
74DEFINE_GUID!{CLSID_WICAdngDecoder,
75    0x981d9411, 0x909e, 0x42a7, 0x8f, 0x5d, 0xa7, 0x47, 0xff, 0x05, 0x2e, 0xdb}
76DEFINE_GUID!{CLSID_WICJpegQualcommPhoneEncoder,
77    0x68ed5c62, 0xf534, 0x4979, 0xb2, 0xb3, 0x68, 0x6a, 0x12, 0xb2, 0xb3, 0x4c}
78DEFINE_GUID!{GUID_ContainerFormatBmp,
79    0x0af1d87e, 0xfcfe, 0x4188, 0xbd, 0xeb, 0xa7, 0x90, 0x64, 0x71, 0xcb, 0xe3}
80DEFINE_GUID!{GUID_ContainerFormatPng,
81    0x1b7cfaf4, 0x713f, 0x473c, 0xbb, 0xcd, 0x61, 0x37, 0x42, 0x5f, 0xae, 0xaf}
82DEFINE_GUID!{GUID_ContainerFormatIco,
83    0xa3a860c4, 0x338f, 0x4c17, 0x91, 0x9a, 0xfb, 0xa4, 0xb5, 0x62, 0x8f, 0x21}
84DEFINE_GUID!{GUID_ContainerFormatJpeg,
85    0x19e4a5aa, 0x5662, 0x4fc5, 0xa0, 0xc0, 0x17, 0x58, 0x02, 0x8e, 0x10, 0x57}
86DEFINE_GUID!{GUID_ContainerFormatTiff,
87    0x163bcc30, 0xe2e9, 0x4f0b, 0x96, 0x1d, 0xa3, 0xe9, 0xfd, 0xb7, 0x88, 0xa3}
88DEFINE_GUID!{GUID_ContainerFormatGif,
89    0x1f8a5601, 0x7d4d, 0x4cbd, 0x9c, 0x82, 0x1b, 0xc8, 0xd4, 0xee, 0xb9, 0xa5}
90DEFINE_GUID!{GUID_ContainerFormatWmp,
91    0x57a37caa, 0x367a, 0x4540, 0x91, 0x6b, 0xf1, 0x83, 0xc5, 0x09, 0x3a, 0x4b}
92DEFINE_GUID!{GUID_ContainerFormatDds,
93    0x9967cb95, 0x2e85, 0x4ac8, 0x8c, 0xa2, 0x83, 0xd7, 0xcc, 0xd4, 0x25, 0xc9}
94DEFINE_GUID!{GUID_ContainerFormatAdng,
95    0xf3ff6d0d, 0x38c0, 0x41c4, 0xb1, 0xfe, 0x1f, 0x38, 0x24, 0xf1, 0x7b, 0x84}
96DEFINE_GUID!{CLSID_WICImagingCategories,
97    0xfae3d380, 0xfea4, 0x4623, 0x8c, 0x75, 0xc6, 0xb6, 0x11, 0x10, 0xb6, 0x81}
98DEFINE_GUID!{CATID_WICBitmapDecoders,
99    0x7ed96837, 0x96f0, 0x4812, 0xb2, 0x11, 0xf1, 0x3c, 0x24, 0x11, 0x7e, 0xd3}
100DEFINE_GUID!{CATID_WICBitmapEncoders,
101    0xac757296, 0x3522, 0x4e11, 0x98, 0x62, 0xc1, 0x7b, 0xe5, 0xa1, 0x76, 0x7e}
102DEFINE_GUID!{CATID_WICPixelFormats,
103    0x2b46e70f, 0xcda7, 0x473e, 0x89, 0xf6, 0xdc, 0x96, 0x30, 0xa2, 0x39, 0x0b}
104DEFINE_GUID!{CATID_WICFormatConverters,
105    0x7835eae8, 0xbf14, 0x49d1, 0x93, 0xce, 0x53, 0x3a, 0x40, 0x7b, 0x22, 0x48}
106DEFINE_GUID!{CATID_WICMetadataReader,
107    0x05af94d8, 0x7174, 0x4cd2, 0xbe, 0x4a, 0x41, 0x24, 0xb8, 0x0e, 0xe4, 0xb8}
108DEFINE_GUID!{CATID_WICMetadataWriter,
109    0xabe3b9a4, 0x257d, 0x4b97, 0xbd, 0x1a, 0x29, 0x4a, 0xf4, 0x96, 0x22, 0x2e}
110DEFINE_GUID!{CLSID_WICDefaultFormatConverter,
111    0x1a3f11dc, 0xb514, 0x4b17, 0x8c, 0x5f, 0x21, 0x54, 0x51, 0x38, 0x52, 0xf1}
112DEFINE_GUID!{CLSID_WICFormatConverterHighColor,
113    0xac75d454, 0x9f37, 0x48f8, 0xb9, 0x72, 0x4e, 0x19, 0xbc, 0x85, 0x60, 0x11}
114DEFINE_GUID!{CLSID_WICFormatConverterNChannel,
115    0xc17cabb2, 0xd4a3, 0x47d7, 0xa5, 0x57, 0x33, 0x9b, 0x2e, 0xfb, 0xd4, 0xf1}
116DEFINE_GUID!{CLSID_WICFormatConverterWMPhoto,
117    0x9cb5172b, 0xd600, 0x46ba, 0xab, 0x77, 0x77, 0xbb, 0x7e, 0x3a, 0x00, 0xd9}
118DEFINE_GUID!{CLSID_WICPlanarFormatConverter,
119    0x184132b8, 0x32f8, 0x4784, 0x91, 0x31, 0xdd, 0x72, 0x24, 0xb2, 0x34, 0x38}
120pub type WICColor = UINT32;
121STRUCT!{struct WICRect {
122    X: INT,
123    Y: INT,
124    Width: INT,
125    Height: INT,
126}}
127pub type WICInProcPointer = *mut BYTE;
128ENUM!{enum WICColorContextType {
129    WICColorContextUninitialized = 0x00000000,
130    WICColorContextProfile = 0x00000001,
131    WICColorContextExifColorSpace = 0x00000002,
132}}
133pub const CODEC_FORCE_DWORD: DWORD = 0x7FFFFFFF;
134pub const WIC_JPEG_MAX_COMPONENT_COUNT: UINT = 4;
135pub const WIC_JPEG_MAX_TABLE_INDEX: UINT = 3;
136pub const WIC_JPEG_SAMPLE_FACTORS_ONE: DWORD = 0x00000011;
137pub const WIC_JPEG_SAMPLE_FACTORS_THREE_420: DWORD = 0x00111122;
138pub const WIC_JPEG_SAMPLE_FACTORS_THREE_422: DWORD = 0x00111121;
139pub const WIC_JPEG_SAMPLE_FACTORS_THREE_440: DWORD = 0x00111112;
140pub const WIC_JPEG_SAMPLE_FACTORS_THREE_444: DWORD = 0x00111111;
141pub const WIC_JPEG_QUANTIZATION_BASELINE_ONE: DWORD = 0x00000000;
142pub const WIC_JPEG_QUANTIZATION_BASELINE_THREE: DWORD = 0x00010100;
143pub const WIC_JPEG_HUFFMAN_BASELINE_ONE: DWORD = 0x00000000;
144pub const WIC_JPEG_HUFFMAN_BASELINE_THREE: DWORD = 0x00111100;
145pub type REFWICPixelFormatGUID = REFGUID;
146pub type WICPixelFormatGUID = GUID;
147DEFINE_GUID!{GUID_WICPixelFormatDontCare,
148    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x00}
149DEFINE_GUID!{GUID_WICPixelFormat1bppIndexed,
150    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x01}
151DEFINE_GUID!{GUID_WICPixelFormat2bppIndexed,
152    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x02}
153DEFINE_GUID!{GUID_WICPixelFormat4bppIndexed,
154    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x03}
155DEFINE_GUID!{GUID_WICPixelFormat8bppIndexed,
156    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x04}
157DEFINE_GUID!{GUID_WICPixelFormatBlackWhite,
158    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x05}
159DEFINE_GUID!{GUID_WICPixelFormat2bppGray,
160    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x06}
161DEFINE_GUID!{GUID_WICPixelFormat4bppGray,
162    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x07}
163DEFINE_GUID!{GUID_WICPixelFormat8bppGray,
164    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x08}
165DEFINE_GUID!{GUID_WICPixelFormat8bppAlpha,
166    0xe6cd0116, 0xeeba, 0x4161, 0xaa, 0x85, 0x27, 0xdd, 0x9f, 0xb3, 0xa8, 0x95}
167DEFINE_GUID!{GUID_WICPixelFormat16bppBGR555,
168    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x09}
169DEFINE_GUID!{GUID_WICPixelFormat16bppBGR565,
170    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x0a}
171DEFINE_GUID!{GUID_WICPixelFormat16bppBGRA5551,
172    0x05ec7c2b, 0xf1e6, 0x4961, 0xad, 0x46, 0xe1, 0xcc, 0x81, 0x0a, 0x87, 0xd2}
173DEFINE_GUID!{GUID_WICPixelFormat16bppGray,
174    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x0b}
175DEFINE_GUID!{GUID_WICPixelFormat24bppBGR,
176    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x0c}
177DEFINE_GUID!{GUID_WICPixelFormat24bppRGB,
178    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x0d}
179DEFINE_GUID!{GUID_WICPixelFormat32bppBGR,
180    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x0e}
181DEFINE_GUID!{GUID_WICPixelFormat32bppBGRA,
182    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x0f}
183DEFINE_GUID!{GUID_WICPixelFormat32bppPBGRA,
184    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x10}
185DEFINE_GUID!{GUID_WICPixelFormat32bppGrayFloat,
186    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x11}
187DEFINE_GUID!{GUID_WICPixelFormat32bppRGB,
188    0xd98c6b95, 0x3efe, 0x47d6, 0xbb, 0x25, 0xeb, 0x17, 0x48, 0xab, 0x0c, 0xf1}
189DEFINE_GUID!{GUID_WICPixelFormat32bppRGBA,
190    0xf5c7ad2d, 0x6a8d, 0x43dd, 0xa7, 0xa8, 0xa2, 0x99, 0x35, 0x26, 0x1a, 0xe9}
191DEFINE_GUID!{GUID_WICPixelFormat32bppPRGBA,
192    0x3cc4a650, 0xa527, 0x4d37, 0xa9, 0x16, 0x31, 0x42, 0xc7, 0xeb, 0xed, 0xba}
193DEFINE_GUID!{GUID_WICPixelFormat48bppRGB,
194    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x15}
195DEFINE_GUID!{GUID_WICPixelFormat48bppBGR,
196    0xe605a384, 0xb468, 0x46ce, 0xbb, 0x2e, 0x36, 0xf1, 0x80, 0xe6, 0x43, 0x13}
197DEFINE_GUID!{GUID_WICPixelFormat64bppRGB,
198    0xa1182111, 0x186d, 0x4d42, 0xbc, 0x6a, 0x9c, 0x83, 0x03, 0xa8, 0xdf, 0xf9}
199DEFINE_GUID!{GUID_WICPixelFormat64bppRGBA,
200    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x16}
201DEFINE_GUID!{GUID_WICPixelFormat64bppBGRA,
202    0x1562ff7c, 0xd352, 0x46f9, 0x97, 0x9e, 0x42, 0x97, 0x6b, 0x79, 0x22, 0x46}
203DEFINE_GUID!{GUID_WICPixelFormat64bppPRGBA,
204    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x17}
205DEFINE_GUID!{GUID_WICPixelFormat64bppPBGRA,
206    0x8c518e8e, 0xa4ec, 0x468b, 0xae, 0x70, 0xc9, 0xa3, 0x5a, 0x9c, 0x55, 0x30}
207DEFINE_GUID!{GUID_WICPixelFormat16bppGrayFixedPoint,
208    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x13}
209DEFINE_GUID!{GUID_WICPixelFormat32bppBGR101010,
210    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x14}
211DEFINE_GUID!{GUID_WICPixelFormat48bppRGBFixedPoint,
212    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x12}
213DEFINE_GUID!{GUID_WICPixelFormat48bppBGRFixedPoint,
214    0x49ca140e, 0xcab6, 0x493b, 0x9d, 0xdf, 0x60, 0x18, 0x7c, 0x37, 0x53, 0x2a}
215DEFINE_GUID!{GUID_WICPixelFormat96bppRGBFixedPoint,
216    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x18}
217DEFINE_GUID!{GUID_WICPixelFormat96bppRGBFloat,
218    0xe3fed78f, 0xe8db, 0x4acf, 0x84, 0xc1, 0xe9, 0x7f, 0x61, 0x36, 0xb3, 0x27}
219DEFINE_GUID!{GUID_WICPixelFormat128bppRGBAFloat,
220    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x19}
221DEFINE_GUID!{GUID_WICPixelFormat128bppPRGBAFloat,
222    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x1a}
223DEFINE_GUID!{GUID_WICPixelFormat128bppRGBFloat,
224    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x1b}
225DEFINE_GUID!{GUID_WICPixelFormat32bppCMYK,
226    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x1c}
227DEFINE_GUID!{GUID_WICPixelFormat64bppRGBAFixedPoint,
228    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x1d}
229DEFINE_GUID!{GUID_WICPixelFormat64bppBGRAFixedPoint,
230    0x356de33c, 0x54d2, 0x4a23, 0xbb, 0x4, 0x9b, 0x7b, 0xf9, 0xb1, 0xd4, 0x2d}
231DEFINE_GUID!{GUID_WICPixelFormat64bppRGBFixedPoint,
232    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x40}
233DEFINE_GUID!{GUID_WICPixelFormat128bppRGBAFixedPoint,
234    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x1e}
235DEFINE_GUID!{GUID_WICPixelFormat128bppRGBFixedPoint,
236    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x41}
237DEFINE_GUID!{GUID_WICPixelFormat64bppRGBAHalf,
238    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x3a}
239DEFINE_GUID!{GUID_WICPixelFormat64bppPRGBAHalf,
240    0x58ad26c2, 0xc623, 0x4d9d, 0xb3, 0x20, 0x38, 0x7e, 0x49, 0xf8, 0xc4, 0x42}
241DEFINE_GUID!{GUID_WICPixelFormat64bppRGBHalf,
242    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x42}
243DEFINE_GUID!{GUID_WICPixelFormat48bppRGBHalf,
244    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x3b}
245DEFINE_GUID!{GUID_WICPixelFormat32bppRGBE,
246    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x3d}
247DEFINE_GUID!{GUID_WICPixelFormat16bppGrayHalf,
248    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x3e}
249DEFINE_GUID!{GUID_WICPixelFormat32bppGrayFixedPoint,
250    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x3f}
251DEFINE_GUID!{GUID_WICPixelFormat32bppRGBA1010102,
252    0x25238D72, 0xFCF9, 0x4522, 0xb5, 0x14, 0x55, 0x78, 0xe5, 0xad, 0x55, 0xe0}
253DEFINE_GUID!{GUID_WICPixelFormat32bppRGBA1010102XR,
254    0x00DE6B9A, 0xC101, 0x434b, 0xb5, 0x02, 0xd0, 0x16, 0x5e, 0xe1, 0x12, 0x2c}
255DEFINE_GUID!{GUID_WICPixelFormat64bppCMYK,
256    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x1f}
257DEFINE_GUID!{GUID_WICPixelFormat24bpp3Channels,
258    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x20}
259DEFINE_GUID!{GUID_WICPixelFormat32bpp4Channels,
260    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x21}
261DEFINE_GUID!{GUID_WICPixelFormat40bpp5Channels,
262    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x22}
263DEFINE_GUID!{GUID_WICPixelFormat48bpp6Channels,
264    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x23}
265DEFINE_GUID!{GUID_WICPixelFormat56bpp7Channels,
266    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x24}
267DEFINE_GUID!{GUID_WICPixelFormat64bpp8Channels,
268    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x25}
269DEFINE_GUID!{GUID_WICPixelFormat48bpp3Channels,
270    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x26}
271DEFINE_GUID!{GUID_WICPixelFormat64bpp4Channels,
272    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x27}
273DEFINE_GUID!{GUID_WICPixelFormat80bpp5Channels,
274    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x28}
275DEFINE_GUID!{GUID_WICPixelFormat96bpp6Channels,
276    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x29}
277DEFINE_GUID!{GUID_WICPixelFormat112bpp7Channels,
278    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x2a}
279DEFINE_GUID!{GUID_WICPixelFormat128bpp8Channels,
280    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x2b}
281DEFINE_GUID!{GUID_WICPixelFormat40bppCMYKAlpha,
282    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x2c}
283DEFINE_GUID!{GUID_WICPixelFormat80bppCMYKAlpha,
284    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x2d}
285DEFINE_GUID!{GUID_WICPixelFormat32bpp3ChannelsAlpha,
286    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x2e}
287DEFINE_GUID!{GUID_WICPixelFormat40bpp4ChannelsAlpha,
288    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x2f}
289DEFINE_GUID!{GUID_WICPixelFormat48bpp5ChannelsAlpha,
290    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x30}
291DEFINE_GUID!{GUID_WICPixelFormat56bpp6ChannelsAlpha,
292    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x31}
293DEFINE_GUID!{GUID_WICPixelFormat64bpp7ChannelsAlpha,
294    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x32}
295DEFINE_GUID!{GUID_WICPixelFormat72bpp8ChannelsAlpha,
296    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x33}
297DEFINE_GUID!{GUID_WICPixelFormat64bpp3ChannelsAlpha,
298    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x34}
299DEFINE_GUID!{GUID_WICPixelFormat80bpp4ChannelsAlpha,
300    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x35}
301DEFINE_GUID!{GUID_WICPixelFormat96bpp5ChannelsAlpha,
302    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x36}
303DEFINE_GUID!{GUID_WICPixelFormat112bpp6ChannelsAlpha,
304    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x37}
305DEFINE_GUID!{GUID_WICPixelFormat128bpp7ChannelsAlpha,
306    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x38}
307DEFINE_GUID!{GUID_WICPixelFormat144bpp8ChannelsAlpha,
308    0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x39}
309DEFINE_GUID!{GUID_WICPixelFormat8bppY,
310    0x91B4DB54, 0x2DF9, 0x42F0, 0xB4, 0x49, 0x29, 0x09, 0xBB, 0x3D, 0xF8, 0x8E}
311DEFINE_GUID!{GUID_WICPixelFormat8bppCb,
312    0x1339F224, 0x6BFE, 0x4C3E, 0x93, 0x02, 0xE4, 0xF3, 0xA6, 0xD0, 0xCA, 0x2A}
313DEFINE_GUID!{GUID_WICPixelFormat8bppCr,
314    0xB8145053, 0x2116, 0x49F0, 0x88, 0x35, 0xED, 0x84, 0x4B, 0x20, 0x5C, 0x51}
315DEFINE_GUID!{GUID_WICPixelFormat16bppCbCr,
316    0xFF95BA6E, 0x11E0, 0x4263, 0xBB, 0x45, 0x01, 0x72, 0x1F, 0x34, 0x60, 0xA4}
317DEFINE_GUID!{GUID_WICPixelFormat16bppYQuantizedDctCoefficients,
318    0xA355F433, 0x48E8, 0x4A42, 0x84, 0xD8, 0xE2, 0xAA, 0x26, 0xCA, 0x80, 0xA4}
319DEFINE_GUID!{GUID_WICPixelFormat16bppCbQuantizedDctCoefficients,
320    0xD2C4FF61, 0x56A5, 0x49C2, 0x8B, 0x5C, 0x4C, 0x19, 0x25, 0x96, 0x48, 0x37}
321DEFINE_GUID!{GUID_WICPixelFormat16bppCrQuantizedDctCoefficients,
322    0x2FE354F0, 0x1680, 0x42D8, 0x92, 0x31, 0xE7, 0x3C, 0x05, 0x65, 0xBF, 0xC1}
323ENUM!{enum WICBitmapCreateCacheOption {
324    WICBitmapNoCache = 0x00000000,
325    WICBitmapCacheOnDemand = 0x00000001,
326    WICBitmapCacheOnLoad = 0x00000002,
327    WICBITMAPCREATECACHEOPTION_FORCE_DWORD = CODEC_FORCE_DWORD,
328}}
329ENUM!{enum WICDecodeOptions {
330    WICDecodeMetadataCacheOnDemand = 0x00000000,
331    WICDecodeMetadataCacheOnLoad = 0x00000001,
332    WICMETADATACACHEOPTION_FORCE_DWORD = CODEC_FORCE_DWORD,
333}}
334ENUM!{enum WICBitmapEncoderCacheOption {
335    WICBitmapEncoderCacheInMemory = 0x00000000,
336    WICBitmapEncoderCacheTempFile = 0x00000001,
337    WICBitmapEncoderNoCache = 0x00000002,
338    WICBITMAPENCODERCACHEOPTION_FORCE_DWORD = CODEC_FORCE_DWORD,
339}}
340ENUM!{enum WICComponentType {
341    WICDecoder = 0x00000001,
342    WICEncoder = 0x00000002,
343    WICPixelFormatConverter = 0x00000004,
344    WICMetadataReader = 0x00000008,
345    WICMetadataWriter = 0x00000010,
346    WICPixelFormat = 0x00000020,
347    WICAllComponents = 0x0000003F,
348    WICCOMPONENTTYPE_FORCE_DWORD = CODEC_FORCE_DWORD,
349}}
350ENUM!{enum WICComponentEnumerateOptions {
351    WICComponentEnumerateDefault = 0x00000000,
352    WICComponentEnumerateRefresh = 0x00000001,
353    WICComponentEnumerateDisabled = 0x80000000,
354    WICComponentEnumerateUnsigned = 0x40000000,
355    WICComponentEnumerateBuiltInOnly = 0x20000000,
356    WICCOMPONENTENUMERATEOPTIONS_FORCE_DWORD = CODEC_FORCE_DWORD,
357}}
358STRUCT!{struct WICBitmapPattern {
359    Position: ULARGE_INTEGER,
360    Length: ULONG,
361    Pattern: *mut BYTE,
362    Mask: *mut BYTE,
363    EndOfStream: BOOL,
364}}
365ENUM!{enum WICBitmapInterpolationMode {
366    WICBitmapInterpolationModeNearestNeighbor = 0x00000000,
367    WICBitmapInterpolationModeLinear = 0x00000001,
368    WICBitmapInterpolationModeCubic = 0x00000002,
369    WICBitmapInterpolationModeFant = 0x00000003,
370    WICBitmapInterpolationModeHighQualityCubic = 0x00000004,
371    WICBITMAPINTERPOLATIONMODE_FORCE_DWORD = CODEC_FORCE_DWORD,
372}}
373ENUM!{enum WICBitmapPaletteType {
374    WICBitmapPaletteTypeCustom = 0x00000000,
375    WICBitmapPaletteTypeMedianCut = 0x00000001,
376    WICBitmapPaletteTypeFixedBW = 0x00000002,
377    WICBitmapPaletteTypeFixedHalftone8 = 0x00000003,
378    WICBitmapPaletteTypeFixedHalftone27 = 0x00000004,
379    WICBitmapPaletteTypeFixedHalftone64 = 0x00000005,
380    WICBitmapPaletteTypeFixedHalftone125 = 0x00000006,
381    WICBitmapPaletteTypeFixedHalftone216 = 0x00000007,
382    WICBitmapPaletteTypeFixedWebPalette = WICBitmapPaletteTypeFixedHalftone216,
383    WICBitmapPaletteTypeFixedHalftone252 = 0x00000008,
384    WICBitmapPaletteTypeFixedHalftone256 = 0x00000009,
385    WICBitmapPaletteTypeFixedGray4 = 0x0000000A,
386    WICBitmapPaletteTypeFixedGray16 = 0x0000000B,
387    WICBitmapPaletteTypeFixedGray256 = 0x0000000C,
388    WICBITMAPPALETTETYPE_FORCE_DWORD = CODEC_FORCE_DWORD,
389}}
390ENUM!{enum WICBitmapDitherType {
391    WICBitmapDitherTypeNone = 0x00000000,
392    WICBitmapDitherTypeSolid = 0x00000000,
393    WICBitmapDitherTypeOrdered4x4 = 0x00000001,
394    WICBitmapDitherTypeOrdered8x8 = 0x00000002,
395    WICBitmapDitherTypeOrdered16x16 = 0x00000003,
396    WICBitmapDitherTypeSpiral4x4 = 0x00000004,
397    WICBitmapDitherTypeSpiral8x8 = 0x00000005,
398    WICBitmapDitherTypeDualSpiral4x4 = 0x00000006,
399    WICBitmapDitherTypeDualSpiral8x8 = 0x00000007,
400    WICBitmapDitherTypeErrorDiffusion = 0x00000008,
401    WICBITMAPDITHERTYPE_FORCE_DWORD = CODEC_FORCE_DWORD,
402}}
403ENUM!{enum WICBitmapAlphaChannelOption {
404    WICBitmapUseAlpha = 0x00000000,
405    WICBitmapUsePremultipliedAlpha = 0x00000001,
406    WICBitmapIgnoreAlpha = 0x00000002,
407    WICBITMAPALPHACHANNELOPTIONS_FORCE_DWORD = CODEC_FORCE_DWORD,
408}}
409ENUM!{enum WICBitmapTransformOptions {
410    WICBitmapTransformRotate0 = 0x00000000,
411    WICBitmapTransformRotate90 = 0x00000001,
412    WICBitmapTransformRotate180 = 0x00000002,
413    WICBitmapTransformRotate270 = 0x00000003,
414    WICBitmapTransformFlipHorizontal = 0x00000008,
415    WICBitmapTransformFlipVertical = 0x00000010,
416    WICBITMAPTRANSFORMOPTIONS_FORCE_DWORD = CODEC_FORCE_DWORD,
417}}
418ENUM!{enum WICBitmapLockFlags {
419    WICBitmapLockRead = 0x00000001,
420    WICBitmapLockWrite = 0x00000002,
421    WICBITMAPLOCKFLAGS_FORCE_DWORD = CODEC_FORCE_DWORD,
422}}
423ENUM!{enum WICBitmapDecoderCapabilities {
424    WICBitmapDecoderCapabilitySameEncoder = 0x00000001,
425    WICBitmapDecoderCapabilityCanDecodeAllImages = 0x00000002,
426    WICBitmapDecoderCapabilityCanDecodeSomeImages = 0x00000004,
427    WICBitmapDecoderCapabilityCanEnumerateMetadata = 0x00000008,
428    WICBitmapDecoderCapabilityCanDecodeThumbnail = 0x00000010,
429    WICBITMAPDECODERCAPABILITIES_FORCE_DWORD = CODEC_FORCE_DWORD,
430}}
431ENUM!{enum WICProgressOperation {
432    WICProgressOperationCopyPixels = 0x00000001,
433    WICProgressOperationWritePixels = 0x00000002,
434    WICProgressOperationAll = 0x0000FFFF,
435    WICPROGRESSOPERATION_FORCE_DWORD = CODEC_FORCE_DWORD,
436}}
437ENUM!{enum WICProgressNotification {
438    WICProgressNotificationBegin = 0x00010000,
439    WICProgressNotificationEnd = 0x00020000,
440    WICProgressNotificationFrequent = 0x00040000,
441    WICProgressNotificationAll = 0xFFFF0000,
442    WICPROGRESSNOTIFICATION_FORCE_DWORD = CODEC_FORCE_DWORD,
443}}
444ENUM!{enum WICComponentSigning {
445    WICComponentSigned = 0x00000001,
446    WICComponentUnsigned = 0x00000002,
447    WICComponentSafe = 0x00000004,
448    WICComponentDisabled = 0x80000000,
449    WICCOMPONENTSIGNING_FORCE_DWORD = CODEC_FORCE_DWORD,
450}}
451ENUM!{enum WICGifLogicalScreenDescriptorProperties {
452    WICGifLogicalScreenSignature = 0x00000001,
453    WICGifLogicalScreenDescriptorWidth = 0x00000002,
454    WICGifLogicalScreenDescriptorHeight = 0x00000003,
455    WICGifLogicalScreenDescriptorGlobalColorTableFlag = 0x00000004,
456    WICGifLogicalScreenDescriptorColorResolution = 0x00000005,
457    WICGifLogicalScreenDescriptorSortFlag = 0x00000006,
458    WICGifLogicalScreenDescriptorGlobalColorTableSize = 0x00000007,
459    WICGifLogicalScreenDescriptorBackgroundColorIndex = 0x00000008,
460    WICGifLogicalScreenDescriptorPixelAspectRatio = 0x00000009,
461    WICGifLogicalScreenDescriptorProperties_FORCE_DWORD = CODEC_FORCE_DWORD,
462}}
463ENUM!{enum WICGifImageDescriptorProperties {
464    WICGifImageDescriptorLeft = 0x00000001,
465    WICGifImageDescriptorTop = 0x00000002,
466    WICGifImageDescriptorWidth = 0x00000003,
467    WICGifImageDescriptorHeight = 0x00000004,
468    WICGifImageDescriptorLocalColorTableFlag = 0x00000005,
469    WICGifImageDescriptorInterlaceFlag = 0x00000006,
470    WICGifImageDescriptorSortFlag = 0x00000007,
471    WICGifImageDescriptorLocalColorTableSize = 0x00000008,
472    WICGifImageDescriptorProperties_FORCE_DWORD = CODEC_FORCE_DWORD,
473}}
474ENUM!{enum WICGifGraphicControlExtensionProperties {
475    WICGifGraphicControlExtensionDisposal = 0x00000001,
476    WICGifGraphicControlExtensionUserInputFlag = 0x00000002,
477    WICGifGraphicControlExtensionTransparencyFlag = 0x00000003,
478    WICGifGraphicControlExtensionDelay = 0x00000004,
479    WICGifGraphicControlExtensionTransparentColorIndex = 0x00000005,
480    WICGifGraphicControlExtensionProperties_FORCE_DWORD = CODEC_FORCE_DWORD,
481}}
482ENUM!{enum WICGifApplicationExtensionProperties {
483    WICGifApplicationExtensionApplication = 0x00000001,
484    WICGifApplicationExtensionData = 0x00000002,
485    WICGifApplicationExtensionProperties_FORCE_DWORD = CODEC_FORCE_DWORD,
486}}
487ENUM!{enum WICGifCommentExtensionProperties {
488    WICGifCommentExtensionText = 0x00000001,
489    WICGifCommentExtensionProperties_FORCE_DWORD = CODEC_FORCE_DWORD,
490}}
491ENUM!{enum WICJpegCommentProperties {
492    WICJpegCommentText = 0x00000001,
493    WICJpegCommentProperties_FORCE_DWORD = CODEC_FORCE_DWORD,
494}}
495ENUM!{enum WICJpegLuminanceProperties {
496    WICJpegLuminanceTable = 0x00000001,
497    WICJpegLuminanceProperties_FORCE_DWORD = CODEC_FORCE_DWORD,
498}}
499ENUM!{enum WICJpegChrominanceProperties {
500    WICJpegChrominanceTable = 0x00000001,
501    WICJpegChrominanceProperties_FORCE_DWORD = CODEC_FORCE_DWORD,
502}}
503ENUM!{enum WIC8BIMIptcProperties {
504    WIC8BIMIptcPString = 0x00000000,
505    WIC8BIMIptcEmbeddedIPTC = 0x00000001,
506    WIC8BIMIptcProperties_FORCE_DWORD = CODEC_FORCE_DWORD,
507}}
508ENUM!{enum WIC8BIMResolutionInfoProperties {
509    WIC8BIMResolutionInfoPString = 0x00000001,
510    WIC8BIMResolutionInfoHResolution = 0x00000002,
511    WIC8BIMResolutionInfoHResolutionUnit = 0x00000003,
512    WIC8BIMResolutionInfoWidthUnit = 0x00000004,
513    WIC8BIMResolutionInfoVResolution = 0x00000005,
514    WIC8BIMResolutionInfoVResolutionUnit = 0x00000006,
515    WIC8BIMResolutionInfoHeightUnit = 0x00000007,
516    WIC8BIMResolutionInfoProperties_FORCE_DWORD = CODEC_FORCE_DWORD,
517}}
518ENUM!{enum WIC8BIMIptcDigestProperties {
519    WIC8BIMIptcDigestPString = 0x00000001,
520    WIC8BIMIptcDigestIptcDigest = 0x00000002,
521    WIC8BIMIptcDigestProperties_FORCE_DWORD = CODEC_FORCE_DWORD,
522}}
523ENUM!{enum WICPngGamaProperties {
524    WICPngGamaGamma = 0x00000001,
525    WICPngGamaProperties_FORCE_DWORD = CODEC_FORCE_DWORD,
526}}
527ENUM!{enum WICPngBkgdProperties {
528    WICPngBkgdBackgroundColor = 0x00000001,
529    WICPngBkgdProperties_FORCE_DWORD = CODEC_FORCE_DWORD,
530}}
531ENUM!{enum WICPngItxtProperties {
532    WICPngItxtKeyword = 0x00000001,
533    WICPngItxtCompressionFlag = 0x00000002,
534    WICPngItxtLanguageTag = 0x00000003,
535    WICPngItxtTranslatedKeyword = 0x00000004,
536    WICPngItxtText = 0x00000005,
537    WICPngItxtProperties_FORCE_DWORD = CODEC_FORCE_DWORD,
538}}
539ENUM!{enum WICPngChrmProperties {
540    WICPngChrmWhitePointX = 0x00000001,
541    WICPngChrmWhitePointY = 0x00000002,
542    WICPngChrmRedX = 0x00000003,
543    WICPngChrmRedY = 0x00000004,
544    WICPngChrmGreenX = 0x00000005,
545    WICPngChrmGreenY = 0x00000006,
546    WICPngChrmBlueX = 0x00000007,
547    WICPngChrmBlueY = 0x0000008,
548    WICPngChrmProperties_FORCE_DWORD = CODEC_FORCE_DWORD,
549}}
550ENUM!{enum WICPngHistProperties {
551    WICPngHistFrequencies = 0x00000001,
552    WICPngHistProperties_FORCE_DWORD = CODEC_FORCE_DWORD,
553}}
554ENUM!{enum WICPngIccpProperties {
555    WICPngIccpProfileName = 0x00000001,
556    WICPngIccpProfileData = 0x00000002,
557    WICPngIccpProperties_FORCE_DWORD = CODEC_FORCE_DWORD,
558}}
559ENUM!{enum WICPngSrgbProperties {
560    WICPngSrgbRenderingIntent = 0x00000001,
561    WICPngSrgbProperties_FORCE_DWORD = CODEC_FORCE_DWORD,
562}}
563ENUM!{enum WICPngTimeProperties {
564    WICPngTimeYear = 0x00000001,
565    WICPngTimeMonth = 0x00000002,
566    WICPngTimeDay = 0x00000003,
567    WICPngTimeHour = 0x00000004,
568    WICPngTimeMinute = 0x00000005,
569    WICPngTimeSecond = 0x00000006,
570    WICPngTimeProperties_FORCE_DWORD = CODEC_FORCE_DWORD,
571}}
572ENUM!{enum WICSectionAccessLevel {
573    WICSectionAccessLevelRead = 0x00000001,
574    WICSectionAccessLevelReadWrite = 0x00000003,
575    WICSectionAccessLevel_FORCE_DWORD = CODEC_FORCE_DWORD,
576}}
577ENUM!{enum WICPixelFormatNumericRepresentation {
578    WICPixelFormatNumericRepresentationUnspecified = 0x00000000,
579    WICPixelFormatNumericRepresentationIndexed = 0x00000001,
580    WICPixelFormatNumericRepresentationUnsignedInteger = 0x00000002,
581    WICPixelFormatNumericRepresentationSignedInteger = 0x00000003,
582    WICPixelFormatNumericRepresentationFixed = 0x00000004,
583    WICPixelFormatNumericRepresentationFloat = 0x00000005,
584    WICPixelFormatNumericRepresentation_FORCE_DWORD = CODEC_FORCE_DWORD,
585}}
586ENUM!{enum WICPlanarOptions {
587    WICPlanarOptionsDefault = 0x00000000,
588    WICPlanarOptionsPreserveSubsampling = 0x00000001,
589    WICPLANAROPTIONS_FORCE_DWORD = CODEC_FORCE_DWORD,
590}}
591ENUM!{enum WICJpegIndexingOptions {
592    WICJpegIndexingOptionsGenerateOnDemand = 0x00000000,
593    WICJpegIndexingOptionsGenerateOnLoad = 0x00000001,
594    WICJpegIndexingOptions_FORCE_DWORD = CODEC_FORCE_DWORD,
595}}
596ENUM!{enum WICJpegTransferMatrix {
597    WICJpegTransferMatrixIdentity = 0x00000000,
598    WICJpegTransferMatrixBT601 = 0x00000001,
599    WICJpegTransferMatrix_FORCE_DWORD = CODEC_FORCE_DWORD,
600}}
601ENUM!{enum WICJpegScanType {
602    WICJpegScanTypeInterleaved = 0x00000000,
603    WICJpegScanTypePlanarComponents = 0x00000001,
604    WICJpegScanTypeProgressive = 0x00000002,
605    WICJpegScanType_FORCE_DWORD = CODEC_FORCE_DWORD,
606}}
607STRUCT!{struct WICImageParameters {
608    PixelFormat: D2D1_PIXEL_FORMAT,
609    DpiX: FLOAT,
610    DpiY: FLOAT,
611    Top: FLOAT,
612    Left: FLOAT,
613    PixelWidth: UINT32,
614    PixelHeight: UINT32,
615}}
616STRUCT!{struct WICBitmapPlaneDescription {
617    Format: WICPixelFormatGUID,
618    Width: UINT,
619    Height: UINT,
620}}
621STRUCT!{struct WICBitmapPlane {
622    Format: WICPixelFormatGUID,
623    pbBuffer: *mut BYTE,
624    cbStride: UINT,
625    cbBufferSize: UINT,
626}}
627STRUCT!{struct WICJpegFrameHeader {
628    Width: UINT,
629    Height: UINT,
630    TransferMatrix: WICJpegTransferMatrix,
631    ScanType: WICJpegScanType,
632    cComponents: UINT,
633    ComponentIdentifiers: DWORD,
634    SampleFactors: DWORD,
635    QuantizationTableIndices: DWORD,
636}}
637STRUCT!{struct WICJpegScanHeader {
638    cComponents: UINT,
639    RestartInterval: UINT,
640    ComponentSelectors: DWORD,
641    HuffmanTableIndices: DWORD,
642    StartSpectralSelection: BYTE,
643    EndSpectralSelection: BYTE,
644    SuccessiveApproximationHigh: BYTE,
645    SuccessiveApproximationLow: BYTE,
646}}
647RIDL!{#[uuid(0x00000040, 0xa8f2, 0x4877, 0xba, 0x0a, 0xfd, 0x2b, 0x66, 0x45, 0xfb, 0x94)]
648interface IWICPalette(IWICPaletteVtbl): IUnknown(IUnknownVtbl) {
649    fn InitializePredefined(
650        ePaletteType: WICBitmapPaletteType,
651        fAddTransparentColor: BOOL,
652    ) -> HRESULT,
653    fn InitializeCustom(
654        pColors: *const WICColor,
655        cCount: UINT,
656    ) -> HRESULT,
657    fn InitializeFromBitmap(
658        pISurface: *const IWICBitmapSource,
659        cCount: UINT,
660        fAddTransparentColor: BOOL,
661    ) -> HRESULT,
662    fn InitializeFromPalette(
663        pIPalette: *const IWICPalette,
664    ) -> HRESULT,
665    fn GetType(
666        pePaletteType: *mut WICBitmapPaletteType,
667    ) -> HRESULT,
668    fn GetColorCount(
669        pcCount: *mut UINT,
670    ) -> HRESULT,
671    fn GetColors(
672        cCount: UINT,
673        pColors: *mut WICColor,
674        pcActualColors: *mut UINT,
675    ) -> HRESULT,
676    fn IsBlackWhite(
677        pfIsBlackWhite: *mut BOOL,
678    ) -> HRESULT,
679    fn IsGrayscale(
680        pfIsGrayscale: *mut BOOL,
681    ) -> HRESULT,
682    fn HasAlpha(
683        pfHasAlpha: *mut BOOL,
684    ) -> HRESULT,
685}}
686RIDL!{#[uuid(0x00000120, 0xa8f2, 0x4877, 0xba, 0x0a, 0xfd, 0x2b, 0x66, 0x45, 0xfb, 0x94)]
687interface IWICBitmapSource(IWICBitmapSourceVtbl): IUnknown(IUnknownVtbl) {
688    fn GetSize(
689        puiWidth: *mut UINT,
690        puiHeight: *mut UINT,
691    ) -> HRESULT,
692    fn GetPixelFormat(
693        pPixelFormat: *mut WICPixelFormatGUID,
694    ) -> HRESULT,
695    fn GetResolution(
696        pDpiX: *mut c_double,
697        pDpiY: *mut c_double,
698    ) -> HRESULT,
699    fn CopyPalette(
700        pIPalette: *mut IWICPalette,
701    ) -> HRESULT,
702    fn CopyPixels(
703        prc: *const WICRect,
704        cbStride: UINT,
705        cbBufferSize: UINT,
706        pbBuffer: *mut BYTE,
707    ) -> HRESULT,
708}}
709RIDL!{#[uuid(0x00000301, 0xa8f2, 0x4877, 0xba, 0x0a, 0xfd, 0x2b, 0x66, 0x45, 0xfb, 0x94)]
710interface IWICFormatConverter(IWICFormatConverterVtbl): IWICBitmapSource(IWICBitmapSourceVtbl) {
711    fn Initialize(
712        pISource: *const IWICBitmapSource,
713        dstFormat: REFWICPixelFormatGUID,
714        dither: WICBitmapDitherType,
715        pIPalette: *const IWICPalette,
716        alphaThresholdPercent: c_double,
717        paletteTranslate: WICBitmapPaletteType,
718    ) -> HRESULT,
719    fn CanConvert(
720        srcPixelFormat: REFWICPixelFormatGUID,
721        dstPixelFormat: REFWICPixelFormatGUID,
722        pfCanConvert: *mut BOOL,
723    ) -> HRESULT,
724}}
725RIDL!{#[uuid(0xbebee9cb, 0x83b0, 0x4dcc, 0x81, 0x32, 0xb0, 0xaa, 0xa5, 0x5e, 0xac, 0x96)]
726interface IWICPlanarFormatConverter(IWICPlanarFormatConverterVtbl):
727    IWICBitmapSource(IWICBitmapSourceVtbl) {
728    fn Initialize(
729        ppPlanes: *const *const IWICBitmapSource,
730        cPlanes: UINT,
731        dstFormat: REFWICPixelFormatGUID,
732        dither: WICBitmapDitherType,
733        pIPalette: *const IWICPalette,
734        alphaThresholdPercent: c_double,
735        paletteTranslate: WICBitmapPaletteType,
736    ) -> HRESULT,
737    fn CanConvert(
738        pSrcPixelFormats: *const WICPixelFormatGUID,
739        cSrcPlanes: UINT,
740        dstPixelFormat: REFWICPixelFormatGUID,
741        pfCanConvert: *mut BOOL,
742    ) -> HRESULT,
743}}
744RIDL!{#[uuid(0x00000302, 0xa8f2, 0x4877, 0xba, 0x0a, 0xfd, 0x2b, 0x66, 0x45, 0xfb, 0x94)]
745interface IWICBitmapScaler(IWICBitmapScalerVtbl): IWICBitmapSource(IWICBitmapSourceVtbl) {
746    fn Initialize(
747        pISource: *const IWICBitmapSource,
748        uiWidth: UINT,
749        uiHeight: UINT,
750        mode: WICBitmapInterpolationMode,
751    ) -> HRESULT,
752}}
753RIDL!{#[uuid(0xe4fbcf03, 0x223d, 0x4e81, 0x93, 0x33, 0xd6, 0x35, 0x55, 0x6d, 0xd1, 0xb5)]
754interface IWICBitmapClipper(IWICBitmapClipperVtbl): IWICBitmapSource(IWICBitmapSourceVtbl) {
755    fn Initialize(
756        pISource: *const IWICBitmapSource,
757        prc: *const WICRect,
758    ) -> HRESULT,
759}}
760RIDL!{#[uuid(0x5009834f, 0x2d6a, 0x41ce, 0x9e, 0x1b, 0x17, 0xc5, 0xaf, 0xf7, 0xa7, 0x82)]
761interface IWICBitmapFlipRotator(IWICBitmapFlipRotatorVtbl):
762    IWICBitmapSource(IWICBitmapSourceVtbl) {
763    fn Initialize(
764        pISource: *const IWICBitmapSource,
765        options: WICBitmapTransformOptions,
766    ) -> HRESULT,
767}}
768RIDL!{#[uuid(0x00000123, 0xa8f2, 0x4877, 0xba, 0x0a, 0xfd, 0x2b, 0x66, 0x45, 0xfb, 0x94)]
769interface IWICBitmapLock(IWICBitmapLockVtbl): IUnknown(IUnknownVtbl) {
770    fn GetSize(
771        puiWidth: *mut UINT,
772        puiHeight: *mut UINT,
773    ) -> HRESULT,
774    fn GetStride(
775        pcbStride: *mut UINT,
776    ) -> HRESULT,
777    fn GetDataPointer(
778        pcbBufferSize: *mut UINT,
779        ppbData: *mut WICInProcPointer,
780    ) -> HRESULT,
781    fn GetPixelFormat(
782        pPixelFormat: *mut WICPixelFormatGUID,
783    ) -> HRESULT,
784}}
785RIDL!{#[uuid(0x00000121, 0xa8f2, 0x4877, 0xba, 0x0a, 0xfd, 0x2b, 0x66, 0x45, 0xfb, 0x94)]
786interface IWICBitmap(IWICBitmapVtbl): IWICBitmapSource(IWICBitmapSourceVtbl) {
787    fn Lock(
788        prcLock: *const WICRect,
789        flags: DWORD,
790        ppILock: *mut *mut IWICBitmapLock,
791    ) -> HRESULT,
792    fn SetPalette(
793        pIPalette: *const IWICPalette,
794    ) -> HRESULT,
795    fn SetResolution(
796        dpiX: c_double,
797        dpiY: c_double,
798    ) -> HRESULT,
799}}
800RIDL!{#[uuid(0x3c613a02, 0x34b2, 0x44ea, 0x9a, 0x7c, 0x45, 0xae, 0xa9, 0xc6, 0xfd, 0x6d)]
801interface IWICColorContext(IWICColorContextVtbl): IUnknown(IUnknownVtbl) {
802    fn InitializeFromFilename(
803        wzFilename: LPCWSTR,
804    ) -> HRESULT,
805    fn InitializeFromMemory(
806        pbBuffer: *const BYTE,
807        cbBufferSize: UINT,
808    ) -> HRESULT,
809    fn InitializeFromExifColorSpace(
810        value: UINT,
811    ) -> HRESULT,
812    fn GetType(
813        pType: *mut WICColorContextType,
814    ) -> HRESULT,
815    fn GetProfileBytes(
816        cbBuffer: UINT,
817        pbBuffer: *mut BYTE,
818        pcbActual: *mut UINT,
819    ) -> HRESULT,
820    fn GetExifColorSpace(
821        pValue: *mut UINT,
822    ) -> HRESULT,
823}}
824RIDL!{#[uuid(0xb66f034f, 0xd0e2, 0x40ab, 0xb4, 0x36, 0x6d, 0xe3, 0x9e, 0x32, 0x1a, 0x94)]
825interface IWICColorTransform(IWICColorTransformVtbl): IWICBitmapSource(IWICBitmapSourceVtbl) {
826    fn Initialize(
827        pIBitmapSource: *const IWICBitmapSource,
828        pIContextSource: *const IWICColorContext,
829        pIContextDest: *const IWICColorContext,
830        pixelFmtDest: REFWICPixelFormatGUID,
831    ) -> HRESULT,
832}}
833RIDL!{#[uuid(0xb84e2c09, 0x78c9, 0x4ac4, 0x8b, 0xd3, 0x52, 0x4a, 0xe1, 0x66, 0x3a, 0x2f)]
834interface IWICFastMetadataEncoder(IWICFastMetadataEncoderVtbl): IUnknown(IUnknownVtbl) {
835    fn Commit() -> HRESULT,
836    fn GetMetadataQueryWriter(
837        ppIMetadataQueryWriter: *mut *mut IWICMetadataQueryWriter,
838    ) -> HRESULT,
839}}
840RIDL!{#[uuid(0x135ff860, 0x22b7, 0x4ddf, 0xb0, 0xf6, 0x21, 0x8f, 0x4f, 0x29, 0x9a, 0x43)]
841interface IWICStream(IWICStreamVtbl): IStream(IStreamVtbl) {
842    fn InitializeFromIStream(
843        pIStream: *const IStream,
844    ) -> HRESULT,
845    fn InitializeFromFilename(
846        wzFileName: LPCWSTR,
847        dwDesiredAccess: DWORD,
848    ) -> HRESULT,
849    fn InitializeFromMemory(
850        pbBuffer: WICInProcPointer,
851        cbBufferSize: DWORD,
852    ) -> HRESULT,
853    fn InitializeFromIStreamRegion(
854        pIStream: *const IStream,
855        ulOffset: ULARGE_INTEGER,
856        ulMaxSize: ULARGE_INTEGER,
857    ) -> HRESULT,
858}}
859RIDL!{#[uuid(0xdc2bb46d, 0x3f07, 0x481e, 0x86, 0x25, 0x22, 0x0c, 0x4a, 0xed, 0xbb, 0x33)]
860interface IWICEnumMetadataItem(IWICEnumMetadataItemVtbl): IUnknown(IUnknownVtbl) {
861    fn Next(
862        celt: ULONG,
863        rgeltSchema: *mut PROPVARIANT,
864        rgeltId: *mut PROPVARIANT,
865        rgeltValue: *mut PROPVARIANT,
866        pceltFetched: *mut ULONG,
867    ) -> HRESULT,
868    fn Skip(
869        celt: ULONG,
870    ) -> HRESULT,
871    fn Reset() -> HRESULT,
872    fn Clone(
873        ppIEnumMetadataItem: *mut *mut IWICEnumMetadataItem,
874    ) -> HRESULT,
875}}
876RIDL!{#[uuid(0x30989668, 0xe1c9, 0x4597, 0xb3, 0x95, 0x45, 0x8e, 0xed, 0xb8, 0x08, 0xdf)]
877interface IWICMetadataQueryReader(IWICMetadataQueryReaderVtbl): IUnknown(IUnknownVtbl) {
878    fn GetContainerFormat(
879        pguidContainerFormat: *mut GUID,
880    ) -> HRESULT,
881    fn GetLocation(
882        cchMaxLength: UINT,
883        wzNamespace: *mut WCHAR,
884        pcchActualLength: *mut UINT,
885    ) -> HRESULT,
886    fn GetMetadataByName(
887        wzName: LPCWSTR,
888        pvarValue: *mut PROPVARIANT,
889    ) -> HRESULT,
890    fn GetEnumerator(
891        ppIEnumString: *mut *mut IEnumString,
892    ) -> HRESULT,
893}}
894RIDL!{#[uuid(0xa721791a, 0x0def, 0x4d06, 0xbd, 0x91, 0x21, 0x18, 0xbf, 0x1d, 0xb1, 0x0b)]
895interface IWICMetadataQueryWriter(IWICMetadataQueryWriterVtbl):
896    IWICMetadataQueryReader(IWICMetadataQueryReaderVtbl) {
897    fn SetMetadataByName(
898        wzName: LPCWSTR,
899        pvarValue: *const PROPVARIANT,
900    ) -> HRESULT,
901    fn RemoveMetadataByName(
902        wzName: LPCWSTR,
903    ) -> HRESULT,
904}}
905RIDL!{#[uuid(0x00000103, 0xa8f2, 0x4877, 0xba, 0x0a, 0xfd, 0x2b, 0x66, 0x45, 0xfb, 0x94)]
906interface IWICBitmapEncoder(IWICBitmapEncoderVtbl): IUnknown(IUnknownVtbl) {
907    fn Initialize(
908        pIStream: *const IStream,
909        cacheOption: WICBitmapEncoderCacheOption,
910    ) -> HRESULT,
911    fn GetContainerFormat(
912        pguidContainerFormat: *mut GUID,
913    ) -> HRESULT,
914    fn GetEncoderInfo(
915        ppIEncoderInfo: *mut *mut IWICBitmapEncoderInfo,
916    ) -> HRESULT,
917    fn SetColorContexts(
918        cCount: UINT,
919        ppIColorContext: *const *const IWICColorContext,
920    ) -> HRESULT,
921    fn SetPalette(
922        pIPalette: *const IWICPalette,
923    ) -> HRESULT,
924    fn SetThumbnail(
925        pIThumbnail: *const IWICBitmapSource,
926    ) -> HRESULT,
927    fn SetPreview(
928        pIPreview: *const IWICBitmapSource,
929    ) -> HRESULT,
930    fn CreateNewFrame(
931        ppIFrameEncode: *mut *mut IWICBitmapFrameEncode,
932        ppIEncoderOptions: *mut *mut IPropertyBag2,
933    ) -> HRESULT,
934    fn Commit() -> HRESULT,
935    fn GetMetadataQueryWriter(
936        ppIMetadataQueryWriter: *mut *mut IWICMetadataQueryWriter,
937    ) -> HRESULT,
938}}
939RIDL!{#[uuid(0x00000105, 0xa8f2, 0x4877, 0xba, 0x0a, 0xfd, 0x2b, 0x66, 0x45, 0xfb, 0x94)]
940interface IWICBitmapFrameEncode(IWICBitmapFrameEncodeVtbl): IUnknown(IUnknownVtbl) {
941    fn Initialize(
942        pIEncoderOptions: *const IPropertyBag2,
943    ) -> HRESULT,
944    fn SetSize(
945        uiWidth: UINT,
946        uiHeight: UINT,
947    ) -> HRESULT,
948    fn SetResolution(
949        dpiX: c_double,
950        dpiY: c_double,
951    ) -> HRESULT,
952    fn SetPixelFormat(
953        pPixelFormat: *mut WICPixelFormatGUID,
954    ) -> HRESULT,
955    fn SetColorContexts(
956        cCount: UINT,
957        ppIColorContext: *const *const IWICColorContext,
958    ) -> HRESULT,
959    fn SetPalette(
960        pIPalette: *const IWICPalette,
961    ) -> HRESULT,
962    fn SetThumbnail(
963        pIThumbnail: *const IWICBitmapSource,
964    ) -> HRESULT,
965    fn WritePixels(
966        lineCount: UINT,
967        cbStride: UINT,
968        cbBufferSize: UINT,
969        pbPixels: *const BYTE,
970    ) -> HRESULT,
971    fn WriteSource(
972        pIBitmapSource: *const IWICBitmapSource,
973        prc: *const WICRect,
974    ) -> HRESULT,
975    fn Commit() -> HRESULT,
976    fn GetMetadataQueryWriter(
977        ppIMetadataQueryWriter: *mut *mut IWICMetadataQueryWriter,
978    ) -> HRESULT,
979}}
980RIDL!{#[uuid(0xf928b7b8, 0x2221, 0x40c1, 0xb7, 0x2e, 0x7e, 0x82, 0xf1, 0x97, 0x4d, 0x1a)]
981interface IWICPlanarBitmapFrameEncode(IWICPlanarBitmapFrameEncodeVtbl): IUnknown(IUnknownVtbl) {
982    fn WritePixels(
983        lineCount: UINT,
984        pPlanes: *const WICBitmapPlane,
985        cPlanes: UINT,
986    ) -> HRESULT,
987    fn WriteSource(
988        ppPlanes: *const *const IWICBitmapSource,
989        cPlanes: UINT,
990        prcSource: *const WICRect,
991    ) -> HRESULT,
992}}
993RIDL!{#[uuid(0x04c75bf8, 0x3ce1, 0x473b, 0xac, 0xc5, 0x3c, 0xc4, 0xf5, 0xe9, 0x49, 0x99)]
994interface IWICImageEncoder(IWICImageEncoderVtbl): IUnknown(IUnknownVtbl) {
995    fn WriteFrame(
996        pImage: *const ID2D1Image,
997        pFrameEncode: *const IWICBitmapFrameEncode,
998        pImageParameters: *const WICImageParameters,
999    ) -> HRESULT,
1000    fn WriteFrameThumbnail(
1001        pImage: *const ID2D1Image,
1002        pFrameEncode: *const IWICBitmapFrameEncode,
1003        pImageParameters: *const WICImageParameters,
1004    ) -> HRESULT,
1005    fn WriteThumbnail(
1006        pImage: *const ID2D1Image,
1007        pEncoder: *const IWICBitmapEncoder,
1008        pImageParameters: *const WICImageParameters,
1009    ) -> HRESULT,
1010}}
1011RIDL!{#[uuid(0x9edde9e7, 0x8dee, 0x47ea, 0x99, 0xdf, 0xe6, 0xfa, 0xf2, 0xed, 0x44, 0xbf)]
1012interface IWICBitmapDecoder(IWICBitmapDecoderVtbl): IUnknown(IUnknownVtbl) {
1013    fn QueryCapability(
1014        pIStream: *const IStream,
1015        pdwCapability: *mut DWORD,
1016    ) -> HRESULT,
1017    fn Initialize(
1018        pIStream: *const IStream,
1019        cacheOptions: WICDecodeOptions,
1020    ) -> HRESULT,
1021    fn GetContainerFormat(
1022        pguidContainerFormat: *mut GUID,
1023    ) -> HRESULT,
1024    fn GetDecoderInfo(
1025        ppIDecoderInfo: *mut *mut IWICBitmapDecoderInfo,
1026    ) -> HRESULT,
1027    fn CopyPalette(
1028        pIPalette: *const IWICPalette,
1029    ) -> HRESULT,
1030    fn GetMetadataQueryReader(
1031        ppIMetadataQueryReader: *mut *mut IWICMetadataQueryReader,
1032    ) -> HRESULT,
1033    fn GetPreview(
1034        ppIBitmapSource: *mut *mut IWICBitmapSource,
1035    ) -> HRESULT,
1036    fn GetColorContexts(
1037        cCount: UINT,
1038        ppIColorContexts: *mut *mut IWICColorContext,
1039        pcActualCount: *mut UINT,
1040    ) -> HRESULT,
1041    fn GetThumbnail(
1042        ppIThumbnail: *mut *mut IWICBitmapSource,
1043    ) -> HRESULT,
1044    fn GetFrameCount(
1045        pCount: *mut UINT,
1046    ) -> HRESULT,
1047    fn GetFrame(
1048        index: UINT,
1049        ppIBitmapFrame: *mut *mut IWICBitmapFrameDecode,
1050    ) -> HRESULT,
1051}}
1052RIDL!{#[uuid(0x3b16811b, 0x6a43, 0x4ec9, 0xb7, 0x13, 0x3d, 0x5a, 0x0c, 0x13, 0xb9, 0x40)]
1053interface IWICBitmapSourceTransform(IWICBitmapSourceTransformVtbl): IUnknown(IUnknownVtbl) {
1054    fn CopyPixels(
1055        prc: *const WICRect,
1056        uiWidth: UINT,
1057        uiHeight: UINT,
1058        pguidDstFormat: *const WICPixelFormatGUID,
1059        dstTransform: WICBitmapTransformOptions,
1060        nStride: UINT,
1061        cbBufferSize: UINT,
1062        pbBuffer: *mut BYTE,
1063    ) -> HRESULT,
1064    fn GetClosestSize(
1065        puiWidth: *mut UINT,
1066        puiHeight: *mut UINT,
1067    ) -> HRESULT,
1068    fn GetClosestPixelFormat(
1069        pguidDstFormat: *mut WICPixelFormatGUID,
1070    ) -> HRESULT,
1071    fn DoesSupportTransform(
1072        dstTransform: WICBitmapTransformOptions,
1073        pfIsSupported: *mut BOOL,
1074    ) -> HRESULT,
1075}}
1076RIDL!{#[uuid(0x3aff9cce, 0xbe95, 0x4303, 0xb9, 0x27, 0xe7, 0xd1, 0x6f, 0xf4, 0xa6, 0x13)]
1077interface IWICPlanarBitmapSourceTransform(IWICPlanarBitmapSourceTransformVtbl):
1078    IUnknown(IUnknownVtbl) {
1079    fn DoesSupportTransform(
1080        puiWidth: *mut UINT,
1081        puiHeight: *mut UINT,
1082        dstTransform: WICBitmapTransformOptions,
1083        dstPlanarOptions: WICPlanarOptions,
1084        pguidDstFormats: *const WICPixelFormatGUID,
1085        pPlaneDescriptions: *mut WICBitmapPlaneDescription,
1086        cPlanes: UINT,
1087        pfIsSupported: *mut BOOL,
1088    ) -> HRESULT,
1089    fn CopyPixels(
1090        prcSource: *const WICRect,
1091        uiWidth: UINT,
1092        uiHeight: UINT,
1093        dstTransform: WICBitmapTransformOptions,
1094        dstPlanarOptions: WICPlanarOptions,
1095        pDstPlanes: *const WICBitmapPlane,
1096        cPlanes: UINT,
1097    ) -> HRESULT,
1098}}
1099RIDL!{#[uuid(0x3b16811b, 0x6a43, 0x4ec9, 0xa8, 0x13, 0x3d, 0x93, 0x0c, 0x13, 0xb9, 0x40)]
1100interface IWICBitmapFrameDecode(IWICBitmapFrameDecodeVtbl):
1101    IWICBitmapSource(IWICBitmapSourceVtbl) {
1102    fn GetMetadataQueryReader(
1103        ppIMetadataQueryReader: *mut *mut IWICMetadataQueryReader,
1104    ) -> HRESULT,
1105    fn GetColorContexts(
1106        cCount: UINT,
1107        ppIColorContexts: *mut *mut IWICColorContext,
1108        pcActualCount: *mut UINT,
1109    ) -> HRESULT,
1110    fn GetThumbnail(
1111        ppIThumbnail: *mut *mut IWICBitmapSource,
1112    ) -> HRESULT,
1113}}
1114RIDL!{#[uuid(0xdaac296f, 0x7aa5, 0x4dbf, 0x8d, 0x15, 0x22, 0x5c, 0x59, 0x76, 0xf8, 0x91)]
1115interface IWICProgressiveLevelControl(IWICProgressiveLevelControlVtbl): IUnknown(IUnknownVtbl) {
1116    fn GetLevelCount(
1117        pcLevels: *mut UINT,
1118    ) -> HRESULT,
1119    fn GetCurrentLevel(
1120        pnLevel: *mut UINT,
1121    ) -> HRESULT,
1122    fn SetCurrentLevel(
1123        nLevel: UINT,
1124    ) -> HRESULT,
1125}}
1126RIDL!{#[uuid(0x4776f9cd, 0x9517, 0x45fa, 0xbf, 0x24, 0xe8, 0x9c, 0x5e, 0xc5, 0xc6, 0x0c)]
1127interface IWICProgressCallback(IWICProgressCallbackVtbl): IUnknown(IUnknownVtbl) {
1128    fn Notify(
1129        uFrameNum: ULONG,
1130        operation: WICProgressOperation,
1131        dblProgress: c_double,
1132    ) -> HRESULT,
1133}}
1134FN!{stdcall PFNProgressNotification(
1135    pvData: LPVOID,
1136    uFrameNum: ULONG,
1137    operation: WICProgressOperation,
1138    dblProgress: c_double,
1139) -> HRESULT}
1140RIDL!{#[uuid(0x64c1024e, 0xc3cf, 0x4462, 0x80, 0x78, 0x88, 0xc2, 0xb1, 0x1c, 0x46, 0xd9)]
1141interface IWICBitmapCodecProgressNotification(IWICBitmapCodecProgressNotificationVtbl):
1142    IUnknown(IUnknownVtbl) {
1143    fn RegisterProgressNotification(
1144        pfnProgressNotification: PFNProgressNotification,
1145        pvData: LPVOID,
1146        dwProgressFlags: DWORD,
1147    ) -> HRESULT,
1148}}
1149RIDL!{#[uuid(0x23bc3f0a, 0x698b, 0x4357, 0x88, 0x6b, 0xf2, 0x4d, 0x50, 0x67, 0x13, 0x34)]
1150interface IWICComponentInfo(IWICComponentInfoVtbl): IUnknown(IUnknownVtbl) {
1151    fn GetComponentType(
1152        pType: *mut WICComponentType,
1153    ) -> HRESULT,
1154    fn GetCLSID(
1155        pclsid: *mut CLSID,
1156    ) -> HRESULT,
1157    fn GetSigningStatus(
1158        pStatus: *mut DWORD,
1159    ) -> HRESULT,
1160    fn GetAuthor(
1161        cchAuthor: UINT,
1162        wzAuthor: *mut WCHAR,
1163        pcchActual: *mut UINT,
1164    ) -> HRESULT,
1165    fn GetVendorGUID(
1166        pguidVendor: *mut GUID,
1167    ) -> HRESULT,
1168    fn GetVersion(
1169        cchVersion: UINT,
1170        wzVersion: *mut WCHAR,
1171        pcchActual: *mut UINT,
1172    ) -> HRESULT,
1173    fn GetSpecVersion(
1174        cchSpecVersion: UINT,
1175        wzSpecVersion: *mut WCHAR,
1176        pcchActual: *mut UINT,
1177    ) -> HRESULT,
1178    fn GetFriendlyName(
1179        cchFriendlyName: UINT,
1180        wzFriendlyName: *mut WCHAR,
1181        pcchActual: *mut UINT,
1182    ) -> HRESULT,
1183}}
1184RIDL!{#[uuid(0x9f34fb65, 0x13f4, 0x4f15, 0xbc, 0x57, 0x37, 0x26, 0xb5, 0xe5, 0x3d, 0x9f)]
1185interface IWICFormatConverterInfo(IWICFormatConverterInfoVtbl):
1186    IWICComponentInfo(IWICComponentInfoVtbl) {
1187    fn GetPixelFormats(
1188        cFormats: UINT,
1189        pPixelFormatGUIDs: *mut WICPixelFormatGUID,
1190        pcActual: *mut UINT,
1191    ) -> HRESULT,
1192    fn CreateInstance(
1193        ppIConverter: *mut *mut IWICFormatConverter,
1194    ) -> HRESULT,
1195}}
1196RIDL!{#[uuid(0xe87a44c4, 0xb76e, 0x4c47, 0x8b, 0x09, 0x29, 0x8e, 0xb1, 0x2a, 0x27, 0x14)]
1197interface IWICBitmapCodecInfo(IWICBitmapCodecInfoVtbl): IWICComponentInfo(IWICComponentInfoVtbl) {
1198    fn GetContainerFormat(
1199        pguidContainerFormat: *mut GUID,
1200    ) -> HRESULT,
1201    fn GetPixelFormats(
1202        cFormats: UINT,
1203        pguidPixelFormats: *mut GUID,
1204        pcActual: *mut UINT,
1205    ) -> HRESULT,
1206    fn GetColorManagementVersion(
1207        cchColorManagementVersion: UINT,
1208        wzColorManagementVersion: *mut WCHAR,
1209        pcchActual: *mut UINT,
1210    ) -> HRESULT,
1211    fn GetDeviceManufacturer(
1212        cchDeviceManufacturer: UINT,
1213        wzDeviceManufacturer: *mut WCHAR,
1214        pcchActual: *mut UINT,
1215    ) -> HRESULT,
1216    fn GetDeviceModels(
1217        cchDeviceModels: UINT,
1218        wzDeviceModels: *mut WCHAR,
1219        pcchActual: *mut UINT,
1220    ) -> HRESULT,
1221    fn GetMimeTypes(
1222        cchMimeTypes: UINT,
1223        wzMimeTypes: *mut WCHAR,
1224        pcchActual: *mut UINT,
1225    ) -> HRESULT,
1226    fn GetFileExtensions(
1227        cchFileExtensions: UINT,
1228        wzFileExtensions: *mut WCHAR,
1229        pcchActual: *mut UINT,
1230    ) -> HRESULT,
1231    fn DoesSupportAnimation(
1232        pfSupportAnimation: *mut BOOL,
1233    ) -> HRESULT,
1234    fn DoesSupportChromakey(
1235        pfSupportChromakey: *mut BOOL,
1236    ) -> HRESULT,
1237    fn DoesSupportLossless(
1238        pfSupportLossless: *mut BOOL,
1239    ) -> HRESULT,
1240    fn DoesSupportMultiframe(
1241        pfSupportMultiframe: *mut BOOL,
1242    ) -> HRESULT,
1243    fn MatchesMimeType(
1244        wzMimeType: LPCWSTR,
1245        pfMatches: *mut BOOL,
1246    ) -> HRESULT,
1247}}
1248RIDL!{#[uuid(0x94c9b4ee, 0xa09f, 0x4f92, 0x8a, 0x1e, 0x4a, 0x9b, 0xce, 0x7e, 0x76, 0xfb)]
1249interface IWICBitmapEncoderInfo(IWICBitmapEncoderInfoVtbl):
1250    IWICBitmapCodecInfo(IWICBitmapCodecInfoVtbl) {
1251    fn CreateInstance(
1252        ppIBitmapEncoder: *mut *mut IWICBitmapEncoder,
1253    ) -> HRESULT,
1254}}
1255RIDL!{#[uuid(0xd8cd007f, 0xd08f, 0x4191, 0x9b, 0xfc, 0x23, 0x6e, 0xa7, 0xf0, 0xe4, 0xb5)]
1256interface IWICBitmapDecoderInfo(IWICBitmapDecoderInfoVtbl):
1257    IWICBitmapCodecInfo(IWICBitmapCodecInfoVtbl) {
1258    fn GetPatterns(
1259        cbSizePatterns: UINT,
1260        pPatterns: *mut WICBitmapPattern,
1261        pcPatterns: *mut UINT,
1262        pcbPatternsActual: *mut UINT,
1263    ) -> HRESULT,
1264    fn MatchesPattern(
1265        pIStream: *const IStream,
1266        pfMatches: *mut BOOL,
1267    ) -> HRESULT,
1268    fn CreateInstance(
1269        ppIBitmapDecoder: *mut *mut IWICBitmapDecoder,
1270    ) -> HRESULT,
1271}}
1272RIDL!{#[uuid(0xe8eda601, 0x3d48, 0x431a, 0xab, 0x44, 0x69, 0x05, 0x9b, 0xe8, 0x8b, 0xbe)]
1273interface IWICPixelFormatInfo(IWICPixelFormatInfoVtbl): IWICComponentInfo(IWICComponentInfoVtbl) {
1274    fn GetFormatGUID(
1275        pFormat: *mut GUID,
1276    ) -> HRESULT,
1277    fn GetColorContext(
1278        ppIColorContext: *mut *mut IWICColorContext,
1279    ) -> HRESULT,
1280    fn GetBitsPerPixel(
1281        puiBitsPerPixel: *mut UINT,
1282    ) -> HRESULT,
1283    fn GetChannelCount(
1284        puiChannelCount: *mut UINT,
1285    ) -> HRESULT,
1286    fn GetChannelMask(
1287        uiChannelIndex: UINT,
1288        cbMaskBuffer: UINT,
1289        pbMaskBuffer: *mut BYTE,
1290        pcbActual: *mut UINT,
1291    ) -> HRESULT,
1292}}
1293RIDL!{#[uuid(0xa9db33a2, 0xaf5f, 0x43c7, 0xb6, 0x79, 0x74, 0xf5, 0x98, 0x4b, 0x5a, 0xa4)]
1294interface IWICPixelFormatInfo2(IWICPixelFormatInfo2Vtbl):
1295    IWICPixelFormatInfo(IWICPixelFormatInfoVtbl) {
1296    fn SupportsTransparency(
1297        pfSupportsTransparency: *mut BOOL,
1298    ) -> HRESULT,
1299    fn GetNumericRepresentation(
1300        pNumericRepresentation: *mut WICPixelFormatNumericRepresentation,
1301    ) -> HRESULT,
1302}}
1303RIDL!{#[uuid(0xec5ec8a9, 0xc395, 0x4314, 0x9c, 0x77, 0x54, 0xd7, 0xa9, 0x35, 0xff, 0x70)]
1304interface IWICImagingFactory(IWICImagingFactoryVtbl): IUnknown(IUnknownVtbl) {
1305    fn CreateDecoderFromFilename(
1306        wzFilename: LPCWSTR,
1307        pguidVendor: *const GUID,
1308        dwDesiredAccess: DWORD,
1309        metadataOptions: WICDecodeOptions,
1310        ppIDecoder: *mut *mut IWICBitmapDecoder,
1311    ) -> HRESULT,
1312    fn CreateDecoderFromStream(
1313        pIStream: *const IStream,
1314        pguidVendor: *const GUID,
1315        metadataOptions: WICDecodeOptions,
1316        ppIDecoder: *mut *mut IWICBitmapDecoder,
1317    ) -> HRESULT,
1318    fn CreateDecoderFromFileHandle(
1319        hFile: ULONG_PTR,
1320        pguidVendor: *const GUID,
1321        metadataOptions: WICDecodeOptions,
1322        ppIDecoder: *mut *mut IWICBitmapDecoder,
1323    ) -> HRESULT,
1324    fn CreateComponentInfo(
1325        clsidComponent: REFCLSID,
1326        ppIInfo: *mut *mut IWICComponentInfo,
1327    ) -> HRESULT,
1328    fn CreateDecoder(
1329        guidContainerFormat: REFGUID,
1330        pguidVendor: *const GUID,
1331        ppIDecoder: *mut *mut IWICBitmapDecoder,
1332    ) -> HRESULT,
1333    fn CreateEncoder(
1334        guidContainerFormat: REFGUID,
1335        pguidVendor: *const GUID,
1336        ppIEncoder: *mut *mut IWICBitmapEncoder,
1337    ) -> HRESULT,
1338    fn CreatePalette(
1339        ppIPalette: *mut *mut IWICPalette,
1340    ) -> HRESULT,
1341    fn CreateFormatConverter(
1342        ppIFormatConverter: *mut *mut IWICFormatConverter,
1343    ) -> HRESULT,
1344    fn CreateBitmapScaler(
1345        ppIBitmapScaler: *mut *mut IWICBitmapScaler,
1346    ) -> HRESULT,
1347    fn CreateBitmapClipper(
1348        ppIBitmapClipper: *mut *mut IWICBitmapClipper,
1349    ) -> HRESULT,
1350    fn CreateBitmapFlipRotator(
1351        ppIBitmapFlipRotator: *mut *mut IWICBitmapFlipRotator,
1352    ) -> HRESULT,
1353    fn CreateStream(
1354        ppIWICStream: *mut *mut IWICStream,
1355    ) -> HRESULT,
1356    fn CreateColorContext(
1357        ppIWICColorContext: *mut *mut IWICColorContext,
1358    ) -> HRESULT,
1359    fn CreateColorTransformer(
1360        ppIWICColorTransform: *mut *mut IWICColorTransform,
1361    ) -> HRESULT,
1362    fn CreateBitmap(
1363        uiWidth: UINT,
1364        uiHeight: UINT,
1365        pixelFormat: REFWICPixelFormatGUID,
1366        option: WICBitmapCreateCacheOption,
1367        ppIBitmap: *mut *mut IWICBitmap,
1368    ) -> HRESULT,
1369    fn CreateBitmapFromSource(
1370        pIBitmapSource: *const IWICBitmapSource,
1371        option: WICBitmapCreateCacheOption,
1372        ppIBitmap: *mut *mut IWICBitmap,
1373    ) -> HRESULT,
1374    fn CreateBitmapFromSourceRect(
1375        pIBitmapSource: *const IWICBitmapSource,
1376        x: UINT,
1377        y: UINT,
1378        width: UINT,
1379        height: UINT,
1380        ppIBitmap: *mut *mut IWICBitmap,
1381    ) -> HRESULT,
1382    fn CreateBitmapFromMemory(
1383        uiWidth: UINT,
1384        uiHeight: UINT,
1385        pixelFormat: REFWICPixelFormatGUID,
1386        cbStride: UINT,
1387        cbBufferSize: UINT,
1388        pbBuffer: *const BYTE,
1389        ppIBitmap: *mut *mut IWICBitmap,
1390    ) -> HRESULT,
1391    fn CreateBitmapFromHBITMAP(
1392        hBitmap: HBITMAP,
1393        hPalette: HPALETTE,
1394        options: WICBitmapAlphaChannelOption,
1395        ppIBitmap: *mut *mut IWICBitmap,
1396    ) -> HRESULT,
1397    fn CreateBitmapFromHICON(
1398        hIcon: HICON,
1399        ppIBitmap: *mut *mut IWICBitmap,
1400    ) -> HRESULT,
1401    fn CreateComponentEnumerator(
1402        componentTypes: DWORD,
1403        options: DWORD,
1404        ppIEnumUnknown: *mut *mut IEnumUnknown,
1405    ) -> HRESULT,
1406    fn CreateFastMetadataEncoderFromDecoder(
1407        pIDecoder: *const IWICBitmapDecoder,
1408        ppIFastEncoder: *mut *mut IWICFastMetadataEncoder,
1409    ) -> HRESULT,
1410    fn CreateFastMetadataEncoderFromFrameDecode(
1411        pIFrameDecoder: *const IWICBitmapFrameDecode,
1412        ppIFastEncoder: *mut *mut IWICFastMetadataEncoder,
1413    ) -> HRESULT,
1414    fn CreateQueryWriter(
1415        guidMetadataFormat: REFGUID,
1416        pguidVendor: *const GUID,
1417        ppIQueryWriter: *mut *mut IWICMetadataQueryWriter,
1418    ) -> HRESULT,
1419    fn CreateQueryWriterFromReader(
1420        pIQueryReader: *const IWICMetadataQueryReader,
1421        pguidVendor: *const GUID,
1422        ppIQueryWriter: *mut *mut IWICMetadataQueryWriter,
1423    ) -> HRESULT,
1424}}
1425RIDL!{#[uuid(0x7b816b45, 0x1996, 0x4476, 0xb1, 0x32, 0xde, 0x9e, 0x24, 0x7c, 0x8a, 0xf0)]
1426interface IWICImagingFactory2(IWICImagingFactory2Vtbl):
1427    IWICImagingFactory(IWICImagingFactoryVtbl) {
1428    fn CreateImageEncoder(
1429        pD2DDevice: *const ID2D1Device,
1430        ppWICImageEncoder: *mut *mut IWICImageEncoder,
1431    ) -> HRESULT,
1432}}
1433extern "system" {
1434    pub fn WICConvertBitmapSource(
1435        dstFormat: REFWICPixelFormatGUID,
1436        pISrc: *const IWICBitmapSource,
1437        ppIDst: *mut *mut IWICBitmapSource,
1438    ) -> HRESULT;
1439    pub fn WICCreateBitmapFromSection(
1440        width: UINT,
1441        height: UINT,
1442        pixelFormat: REFWICPixelFormatGUID,
1443        hSection: HANDLE,
1444        stride: UINT,
1445        offset: UINT,
1446        ppIBitmap: *mut *mut IWICBitmap,
1447    ) -> HRESULT;
1448    pub fn WICCreateBitmapFromSectionEx(
1449        width: UINT,
1450        height: UINT,
1451        pixelFormat: REFWICPixelFormatGUID,
1452        hSection: HANDLE,
1453        stride: UINT,
1454        offset: UINT,
1455        desiredAccessLevel: WICSectionAccessLevel,
1456        ppIBitmap: *mut *mut IWICBitmap,
1457    ) -> HRESULT;
1458    pub fn WICMapGuidToShortName(
1459        guid: REFGUID,
1460        cchName: UINT,
1461        wzName: *mut WCHAR,
1462        pcchActual: *mut UINT,
1463    ) -> HRESULT;
1464    pub fn WICMapShortNameToGuid(
1465        wzName: PCWSTR,
1466        pguid: *mut GUID,
1467    ) -> HRESULT;
1468    pub fn WICMapSchemaToName(
1469        guidMetadataFormat: REFGUID,
1470        pwzSchema: LPWSTR,
1471        cchName: UINT,
1472        wzName: *mut WCHAR,
1473        pcchActual: *mut UINT,
1474    ) -> HRESULT;
1475}
1476pub const FACILITY_WINCODEC_ERR: HRESULT = 0x898;
1477pub const WINCODEC_ERR_BASE: HRESULT = 0x2000;
1478/// intsafe.h, 0x216 = 534 = ERROR_ARITHMETIC_OVERFLOW
1479pub const INTSAFE_E_ARITHMETIC_OVERFLOW: HRESULT = 0x80070216;
1480#[inline]
1481pub fn MAKE_WINCODECHR(severity: HRESULT, code: HRESULT) -> HRESULT {
1482    MAKE_HRESULT!(severity, FACILITY_WINCODEC_ERR, WINCODEC_ERR_BASE + code)
1483}
1484#[inline]
1485pub fn MAKE_WINCODECHR_ERR(code: HRESULT) -> HRESULT {
1486    MAKE_WINCODECHR(SEVERITY_ERROR, code)
1487}
1488pub const WINCODEC_ERR_GENERIC_ERROR: HRESULT = E_FAIL;
1489pub const WINCODEC_ERR_INVALIDPARAMETER: HRESULT = E_INVALIDARG;
1490pub const WINCODEC_ERR_OUTOFMEMORY: HRESULT = E_OUTOFMEMORY;
1491pub const WINCODEC_ERR_NOTIMPLEMENTED: HRESULT = E_NOTIMPL;
1492pub const WINCODEC_ERR_ABORTED: HRESULT = E_ABORT;
1493pub const WINCODEC_ERR_ACCESSDENIED: HRESULT = E_ACCESSDENIED;
1494pub const WINCODEC_ERR_VALUEOVERFLOW: HRESULT = INTSAFE_E_ARITHMETIC_OVERFLOW;
1495ENUM!{enum WICTiffCompressionOption {
1496    WICTiffCompressionDontCare = 0x00000000,
1497    WICTiffCompressionNone = 0x00000001,
1498    WICTiffCompressionCCITT3 = 0x00000002,
1499    WICTiffCompressionCCITT4 = 0x00000003,
1500    WICTiffCompressionLZW = 0x00000004,
1501    WICTiffCompressionRLE = 0x00000005,
1502    WICTiffCompressionZIP = 0x00000006,
1503    WICTiffCompressionLZWHDifferencing = 0x00000007,
1504    WICTIFFCOMPRESSIONOPTION_FORCE_DWORD = CODEC_FORCE_DWORD,
1505}}
1506ENUM!{enum WICJpegYCrCbSubsamplingOption {
1507    WICJpegYCrCbSubsamplingDefault = 0x00000000,
1508    WICJpegYCrCbSubsampling420 = 0x00000001,
1509    WICJpegYCrCbSubsampling422 = 0x00000002,
1510    WICJpegYCrCbSubsampling444 = 0x00000003,
1511    WICJpegYCrCbSubsampling440 = 0x00000004,
1512    WICJPEGYCRCBSUBSAMPLING_FORCE_DWORD = CODEC_FORCE_DWORD,
1513}}
1514ENUM!{enum WICPngFilterOption {
1515    WICPngFilterUnspecified = 0x00000000,
1516    WICPngFilterNone = 0x00000001,
1517    WICPngFilterSub = 0x00000002,
1518    WICPngFilterUp = 0x00000003,
1519    WICPngFilterAverage = 0x00000004,
1520    WICPngFilterPaeth = 0x00000005,
1521    WICPngFilterAdaptive = 0x00000006,
1522    WICPNGFILTEROPTION_FORCE_DWORD = CODEC_FORCE_DWORD,
1523}}
1524ENUM!{enum WICNamedWhitePoint {
1525    WICWhitePointDefault = 0x00000001,
1526    WICWhitePointDaylight = 0x00000002,
1527    WICWhitePointCloudy = 0x00000004,
1528    WICWhitePointShade = 0x00000008,
1529    WICWhitePointTungsten = 0x00000010,
1530    WICWhitePointFluorescent = 0x00000020,
1531    WICWhitePointFlash = 0x00000040,
1532    WICWhitePointUnderwater = 0x00000080,
1533    WICWhitePointCustom = 0x00000100,
1534    WICWhitePointAutoWhiteBalance = 0x00000200,
1535    WICWhitePointAsShot = WICWhitePointDefault,
1536    WICNAMEDWHITEPOINT_FORCE_DWORD = CODEC_FORCE_DWORD,
1537}}
1538ENUM!{enum WICRawCapabilities {
1539    WICRawCapabilityNotSupported = 0x00000000,
1540    WICRawCapabilityGetSupported = 0x00000001,
1541    WICRawCapabilityFullySupported = 0x00000002,
1542    WICRAWCAPABILITIES_FORCE_DWORD = CODEC_FORCE_DWORD,
1543}}
1544ENUM!{enum WICRawRotationCapabilities {
1545    WICRawRotationCapabilityNotSupported = 0x00000000,
1546    WICRawRotationCapabilityGetSupported = 0x00000001,
1547    WICRawRotationCapabilityNinetyDegreesSupported = 0x00000002,
1548    WICRawRotationCapabilityFullySupported = 0x00000003,
1549    WICRAWROTATIONCAPABILITIES_FORCE_DWORD = CODEC_FORCE_DWORD,
1550}}
1551STRUCT!{struct WICRawCapabilitiesInfo {
1552    cbSize: UINT,
1553    CodecMajorVersion: UINT,
1554    CodecMinorVersion: UINT,
1555    ExposureCompensationSupport: WICRawCapabilities,
1556    ContrastSupport: WICRawCapabilities,
1557    RGBWhitePointSupport: WICRawCapabilities,
1558    NamedWhitePointSupport: WICRawCapabilities,
1559    NamedWhitePointSupportMask: UINT,
1560    KelvinWhitePointSupport: WICRawCapabilities,
1561    GammaSupport: WICRawCapabilities,
1562    TintSupport: WICRawCapabilities,
1563    SaturationSupport: WICRawCapabilities,
1564    SharpnessSupport: WICRawCapabilities,
1565    NoiseReductionSupport: WICRawCapabilities,
1566    DestinationColorProfileSupport: WICRawCapabilities,
1567    ToneCurveSupport: WICRawCapabilities,
1568    RotationSupport: WICRawRotationCapabilities,
1569    RenderModeSupport: WICRawCapabilities,
1570}}
1571ENUM!{enum WICRawParameterSet {
1572    WICAsShotParameterSet = 0x00000001,
1573    WICUserAdjustedParameterSet = 0x00000002,
1574    WICAutoAdjustedParameterSet = 0x00000003,
1575    WICRAWPARAMETERSET_FORCE_DWORD = CODEC_FORCE_DWORD,
1576}}
1577ENUM!{enum WICRawRenderMode {
1578    WICRawRenderModeDraft = 0x00000001,
1579    WICRawRenderModeNormal = 0x00000002,
1580    WICRawRenderModeBestQuality = 0x00000003,
1581    WICRAWRENDERMODE_FORCE_DWORD = CODEC_FORCE_DWORD,
1582}}
1583STRUCT!{struct WICRawToneCurvePoint {
1584    Input: c_double,
1585    Output: c_double,
1586}}
1587STRUCT!{struct WICRawToneCurve {
1588    cPoints: UINT,
1589    aPoints: [WICRawToneCurvePoint; 1],
1590}}
1591pub const WICRawChangeNotification_ExposureCompensation: UINT = 0x00000001;
1592pub const WICRawChangeNotification_NamedWhitePoint: UINT = 0x00000002;
1593pub const WICRawChangeNotification_KelvinWhitePoint: UINT = 0x00000004;
1594pub const WICRawChangeNotification_RGBWhitePoint: UINT = 0x00000008;
1595pub const WICRawChangeNotification_Contrast: UINT = 0x00000010;
1596pub const WICRawChangeNotification_Gamma: UINT = 0x00000020;
1597pub const WICRawChangeNotification_Sharpness: UINT = 0x00000040;
1598pub const WICRawChangeNotification_Saturation: UINT = 0x00000080;
1599pub const WICRawChangeNotification_Tint: UINT = 0x00000100;
1600pub const WICRawChangeNotification_NoiseReduction: UINT = 0x00000200;
1601pub const WICRawChangeNotification_DestinationColorContext: UINT = 0x00000400;
1602pub const WICRawChangeNotification_ToneCurve: UINT = 0x00000800;
1603pub const WICRawChangeNotification_Rotation: UINT = 0x00001000;
1604pub const WICRawChangeNotification_RenderMode: UINT = 0x00002000;
1605RIDL!{#[uuid(0x95c75a6e, 0x3e8c, 0x4ec2, 0x85, 0xa8, 0xae, 0xbc, 0xc5, 0x51, 0xe5, 0x9b)]
1606interface IWICDevelopRawNotificationCallback(IWICDevelopRawNotificationCallbackVtbl):
1607    IUnknown(IUnknownVtbl) {
1608    fn Notify(
1609        NotificationMask: UINT,
1610    ) -> HRESULT,
1611}}
1612RIDL!{#[uuid(0xfbec5e44, 0xf7be, 0x4b65, 0xb7, 0xf8, 0xc0, 0xc8, 0x1f, 0xef, 0x02, 0x6d)]
1613interface IWICDevelopRaw(IWICDevelopRawVtbl): IWICBitmapFrameDecode(IWICBitmapFrameDecodeVtbl) {
1614    fn QueryRawCapabilitiesInfo(
1615        pInfo: *mut WICRawCapabilitiesInfo,
1616    ) -> HRESULT,
1617    fn LoadParameterSet(
1618        ParameterSet: WICRawParameterSet,
1619    ) -> HRESULT,
1620    fn GetCurrentParameterSet(
1621        ppCurrentParameterSet: *mut *mut IPropertyBag2,
1622    ) -> HRESULT,
1623    fn SetExposureCompensation(
1624        ev: c_double,
1625    ) -> HRESULT,
1626    fn GetExposureCompensation(
1627        pEV: *mut c_double,
1628    ) -> HRESULT,
1629    fn SetWhitePointRGB(
1630        Red: UINT,
1631        Green: UINT,
1632        Blue: UINT,
1633    ) -> HRESULT,
1634    fn GetWhitePointRGB(
1635        pRed: *mut UINT,
1636        pGreen: *mut UINT,
1637        pBlue: *mut UINT,
1638    ) -> HRESULT,
1639    fn SetNamedWhitePoint(
1640        WhitePoint: WICNamedWhitePoint,
1641    ) -> HRESULT,
1642    fn GetNamedWhitePoint(
1643        pWhitePoint: *mut WICNamedWhitePoint,
1644    ) -> HRESULT,
1645    fn SetWhitePointKelvin(
1646        WhitePointKelvin: UINT,
1647    ) -> HRESULT,
1648    fn GetWhitePointKelvin(
1649        pWhitePointKelvin: *mut UINT,
1650    ) -> HRESULT,
1651    fn GetKelvinRangeInfo(
1652        pMinKelvinTemp: *mut UINT,
1653        pMaxKelvinTemp: *mut UINT,
1654        pKelvinTempStepValue: *mut UINT,
1655    ) -> HRESULT,
1656    fn SetContrast(
1657        Contrast: c_double,
1658    ) -> HRESULT,
1659    fn GetContrast(
1660        pContrast: *mut c_double,
1661    ) -> HRESULT,
1662    fn SetGamma(
1663        Gamma: c_double,
1664    ) -> HRESULT,
1665    fn GetGamma(
1666        pGamma: *mut c_double,
1667    ) -> HRESULT,
1668    fn SetSharpness(
1669        Sharpness: c_double,
1670    ) -> HRESULT,
1671    fn GetSharpness(
1672        pSharpness: *mut c_double,
1673    ) -> HRESULT,
1674    fn SetSaturation(
1675        Saturation: c_double,
1676    ) -> HRESULT,
1677    fn GetSaturation(
1678        pSaturation: *mut c_double,
1679    ) -> HRESULT,
1680    fn SetTint(
1681        Tint: c_double,
1682    ) -> HRESULT,
1683    fn GetTint(
1684        pTint: *mut c_double,
1685    ) -> HRESULT,
1686    fn SetNoiseReduction(
1687        NoiseReduction: c_double,
1688    ) -> HRESULT,
1689    fn GetNoiseReduction(
1690        pNoiseReduction: *mut c_double,
1691    ) -> HRESULT,
1692    fn SetDestinationColorContext(
1693        pColorContext: *const IWICColorContext,
1694    ) -> HRESULT,
1695    fn SetToneCurve(
1696        cbToneCurveSize: UINT,
1697        pToneCurve: *const WICRawToneCurve,
1698    ) -> HRESULT,
1699    fn GetToneCurve(
1700        cbToneCurveBufferSize: UINT,
1701        pToneCurve: *mut WICRawToneCurve,
1702        pcbActualToneCurveBufferSize: *mut UINT,
1703    ) -> HRESULT,
1704    fn SetRotation(
1705        Rotation: c_double,
1706    ) -> HRESULT,
1707    fn GetRotation(
1708        pRotation: *mut c_double,
1709    ) -> HRESULT,
1710    fn SetRenderMode(
1711        RenderMode: WICRawRenderMode,
1712    ) -> HRESULT,
1713    fn GetRenderMode(
1714        pRenderMode: *mut WICRawRenderMode,
1715    ) -> HRESULT,
1716    fn SetNotificationCallback(
1717        pCallback: *const IWICDevelopRawNotificationCallback,
1718    ) -> HRESULT,
1719}}
1720ENUM!{enum WICDdsDimension {
1721    WICDdsTexture1D = 0x00000000,
1722    WICDdsTexture2D = 0x00000001,
1723    WICDdsTexture3D = 0x00000002,
1724    WICDdsTextureCube = 0x00000003,
1725    WICDDSTEXTURE_FORCE_DWORD = CODEC_FORCE_DWORD,
1726}}
1727ENUM!{enum WICDdsAlphaMode {
1728    WICDdsAlphaModeUnknown = 0x00000000,
1729    WICDdsAlphaModeStraight = 0x00000001,
1730    WICDdsAlphaModePremultiplied = 0x00000002,
1731    WICDdsAlphaModeOpaque = 0x00000003,
1732    WICDdsAlphaModeCustom = 0x00000004,
1733    WICDDSALPHAMODE_FORCE_DWORD = CODEC_FORCE_DWORD,
1734}}
1735STRUCT!{struct WICDdsParameters {
1736    Width: UINT,
1737    Height: UINT,
1738    Depth: UINT,
1739    MipLevels: UINT,
1740    ArraySize: UINT,
1741    DxgiFormat: DXGI_FORMAT,
1742    Dimension: WICDdsDimension,
1743    AlphaMode: WICDdsAlphaMode,
1744}}
1745RIDL!{#[uuid(0x409cd537, 0x8532, 0x40cb, 0x97, 0x74, 0xe2, 0xfe, 0xb2, 0xdf, 0x4e, 0x9c)]
1746interface IWICDdsDecoder(IWICDdsDecoderVtbl): IUnknown(IUnknownVtbl) {
1747    fn GetParameters(
1748        pParameters: *mut WICDdsParameters,
1749    ) -> HRESULT,
1750    fn GetFrame(
1751        arrayIndex: UINT,
1752        mipLevel: UINT,
1753        sliceIndex: UINT,
1754        ppIBitmapFrame: *mut *mut IWICBitmapFrameDecode,
1755    ) -> HRESULT,
1756}}
1757RIDL!{#[uuid(0x5cacdb4c, 0x407e, 0x41b3, 0xb9, 0x36, 0xd0, 0xf0, 0x10, 0xcd, 0x67, 0x32)]
1758interface IWICDdsEncoder(IWICDdsEncoderVtbl): IUnknown(IUnknownVtbl) {
1759    fn SetParameters(
1760        pParameters: *const WICDdsParameters,
1761    ) -> HRESULT,
1762    fn GetParameters(
1763        pParameters: *mut WICDdsParameters,
1764    ) -> HRESULT,
1765    fn CreateNewFrame(
1766        ppIFrameEncode: *mut *mut IWICBitmapFrameEncode,
1767        pArrayIndex: *mut UINT,
1768        pMipLevel: *mut UINT,
1769        pSliceIndex: *mut UINT,
1770    ) -> HRESULT,
1771}}
1772STRUCT!{struct WICDdsFormatInfo {
1773    DxgiFormat: DXGI_FORMAT,
1774    BytesPerBlock: UINT,
1775    BlockWidth: UINT,
1776    BlockHeight: UINT,
1777}}
1778RIDL!{#[uuid(0x3d4c0c61, 0x18a4, 0x41e4, 0xbd, 0x80, 0x48, 0x1a, 0x4f, 0xc9, 0xf4, 0x64)]
1779interface IWICDdsFrameDecode(IWICDdsFrameDecodeVtbl): IUnknown(IUnknownVtbl) {
1780    fn GetSizeInBlocks(
1781        pWidthInBlocks: *mut UINT,
1782        pHeightInBlocks: *mut UINT,
1783    ) -> HRESULT,
1784    fn GetFormatInfo(
1785        pFormatInfo: *mut WICDdsFormatInfo,
1786    ) -> HRESULT,
1787    fn CopyBlocks(
1788        prcBoundsInBlocks: *const WICRect,
1789        cbStride: UINT,
1790        cbBufferSize: UINT,
1791        pbBuffer: *mut BYTE,
1792    ) -> HRESULT,
1793}}
1794RIDL!{#[uuid(0x8939f66e, 0xc46a, 0x4c21, 0xa9, 0xd1, 0x98, 0xb3, 0x27, 0xce, 0x16, 0x79)]
1795interface IWICJpegFrameDecode(IWICJpegFrameDecodeVtbl): IUnknown(IUnknownVtbl) {
1796    fn DoesSupportIndexing(
1797        pfIndexingSupported: *mut BOOL,
1798    ) -> HRESULT,
1799    fn SetIndexing(
1800        options: WICJpegIndexingOptions,
1801        horizontalIntervalSize: UINT,
1802    ) -> HRESULT,
1803    fn ClearIndexing() -> HRESULT,
1804    fn GetAcHuffmanTable(
1805        scanIndex: UINT,
1806        tableIndex: UINT,
1807        pAcHuffmanTable: *mut DXGI_JPEG_AC_HUFFMAN_TABLE,
1808    ) -> HRESULT,
1809    fn GetDcHuffmanTable(
1810        scanIndex: UINT,
1811        tableIndex: UINT,
1812        pDcHuffmanTable: *mut DXGI_JPEG_DC_HUFFMAN_TABLE,
1813    ) -> HRESULT,
1814    fn GetQuantizationTable(
1815        scanIndex: UINT,
1816        tableIndex: UINT,
1817        pQuantizationTable: *mut DXGI_JPEG_QUANTIZATION_TABLE,
1818    ) -> HRESULT,
1819    fn GetFrameHeader(
1820        pFrameHeader: *mut WICJpegFrameHeader,
1821    ) -> HRESULT,
1822    fn GetScanHeader(
1823        scanIndex: UINT,
1824        pScanHeader: *mut WICJpegScanHeader,
1825    ) -> HRESULT,
1826    fn CopyScan(
1827        scanIndex: UINT,
1828        scanOffset: UINT,
1829        cbScanData: UINT,
1830        pbScanData: *mut BYTE,
1831        pcbScanDataActual: *mut UINT,
1832    ) -> HRESULT,
1833    fn CopyMinimalStream(
1834        streamOffset: UINT,
1835        cbStreamData: UINT,
1836        pbStreamData: *mut BYTE,
1837        pcbStreamDataActual: *mut UINT,
1838    ) -> HRESULT,
1839}}
1840RIDL!{#[uuid(0x2f0c601f, 0xd2c6, 0x468c, 0xab, 0xfa, 0x49, 0x49, 0x5d, 0x98, 0x3e, 0xd1)]
1841interface IWICJpegFrameEncode(IWICJpegFrameEncodeVtbl): IUnknown(IUnknownVtbl) {
1842    fn GetAcHuffmanTable(
1843        scanIndex: UINT,
1844        tableIndex: UINT,
1845        pAcHuffmanTable: *mut DXGI_JPEG_AC_HUFFMAN_TABLE,
1846    ) -> HRESULT,
1847    fn GetDcHuffmanTable(
1848        scanIndex: UINT,
1849        tableIndex: UINT,
1850        pDcHuffmanTable: *mut DXGI_JPEG_DC_HUFFMAN_TABLE,
1851    ) -> HRESULT,
1852    fn GetQuantizationTable(
1853        scanIndex: UINT,
1854        tableIndex: UINT,
1855        pQuantizationTable: *mut DXGI_JPEG_QUANTIZATION_TABLE,
1856    ) -> HRESULT,
1857    fn WriteScan(
1858        cbScanData: UINT,
1859        pbScanData: *const BYTE,
1860    ) -> HRESULT,
1861}}