1 // Copyright © 2015; Connor Hilarides
2 // Licensed under the MIT License <LICENSE.md>
3 //! Mappings for the contents of wincodec.h
4 pub type WICColor = ::UINT32;
5 pub type WICInProcPointer = *mut ::BYTE;
6 pub type REFWICPixelFormatGUID = ::REFGUID;
7 pub type WICPixelFormatGUID = ::GUID;
8 STRUCT!{struct WICRect {
9     X: ::INT,
10     Y: ::INT,
11     Width: ::INT,
12     Height: ::INT,
13 }}
14 ENUM!{enum WICColorContextType {
15     WICColorContextUninitialized = 0,
16     WICColorContextProfile = 0x1,
17     WICColorContextExifColorSpace = 0x2,
18 }}
19 ENUM!{enum WICBitmapCreateCacheOption {
20     WICBitmapNoCache = 0,
21     WICBitmapCacheOnDemand = 0x1,
22     WICBitmapCacheOnLoad = 0x2,
23 }}
24 ENUM!{enum WICDecodeOptions {
25     WICDecodeMetadataCacheOnDemand = 0,
26     WICDecodeMetadataCacheOnLoad = 0x1,
27 }}
28 ENUM!{enum WICBitmapEncoderCacheOption {
29     WICBitmapEncoderCacheInMemory = 0,
30     WICBitmapEncoderCacheTempFile = 0x1,
31     WICBitmapEncoderNoCache = 0x2,
32 }}
33 FLAGS!{enum WICComponentType {
34     WICDecoder = 0x1,
35     WICEncoder = 0x2,
36     WICPixelFormatConverter = 0x4,
37     WICMetadataReader = 0x8,
38     WICMetadataWriter = 0x10,
39     WICPixelFormat = 0x20,
40     WICAllComponents = 0x3f,
41 }}
42 FLAGS!{enum WICComponentEnumerateOptions {
43     WICComponentEnumerateDefault = 0,
44     WICComponentEnumerateRefresh = 0x1,
45     WICComponentEnumerateDisabled = 0x80000000,
46     WICComponentEnumerateUnsigned = 0x40000000,
47     WICComponentEnumerateBuiltInOnly = 0x20000000,
48 }}
49 #[allow(unused_qualifications)]
50 STRUCT!{struct WICBitmapPattern {
51     Position: ::ULARGE_INTEGER,
52     Length: ::ULONG,
53     Pattern: *mut ::BYTE,
54     Mask: *mut ::BYTE,
55     EndOfStream: ::BOOL,
56 }}
57 ENUM!{enum WICBitmapInterpolationMode {
58     WICBitmapInterpolationModeNearestNeighbor = 0,
59     WICBitmapInterpolationModeLinear = 0x1,
60     WICBitmapInterpolationModeCubic = 0x2,
61     WICBitmapInterpolationModeFant = 0x3,
62 }}
63 ENUM!{enum WICBitmapPaletteType {
64     WICBitmapPaletteTypeCustom = 0,
65     WICBitmapPaletteTypeMedianCut = 0x1,
66     WICBitmapPaletteTypeFixedBW = 0x2,
67     WICBitmapPaletteTypeFixedHalftone8 = 0x3,
68     WICBitmapPaletteTypeFixedHalftone27 = 0x4,
69     WICBitmapPaletteTypeFixedHalftone64 = 0x5,
70     WICBitmapPaletteTypeFixedHalftone125 = 0x6,
71     WICBitmapPaletteTypeFixedHalftone216 = 0x7,
72     WICBitmapPaletteTypeFixedHalftone252 = 0x8,
73     WICBitmapPaletteTypeFixedHalftone256 = 0x9,
74     WICBitmapPaletteTypeFixedGray4 = 0xa,
75     WICBitmapPaletteTypeFixedGray16 = 0xb,
76     WICBitmapPaletteTypeFixedGray256 = 0xc,
77 }}
78 pub const WICBitmapPaletteTypeFixedWebPalette: WICBitmapPaletteType =
79     WICBitmapPaletteTypeFixedHalftone216;
80 ENUM!{enum WICBitmapDitherType {
81     WICBitmapDitherTypeSolid = 0,
82     WICBitmapDitherTypeOrdered4x4 = 0x1,
83     WICBitmapDitherTypeOrdered8x8 = 0x2,
84     WICBitmapDitherTypeOrdered16x16 = 0x3,
85     WICBitmapDitherTypeSpiral4x4 = 0x4,
86     WICBitmapDitherTypeSpiral8x8 = 0x5,
87     WICBitmapDitherTypeDualSpiral4x4 = 0x6,
88     WICBitmapDitherTypeDualSpiral8x8 = 0x7,
89     WICBitmapDitherTypeErrorDiffusion = 0x8,
90 }}
91 pub const WICBitmapDitherTypeNone: WICBitmapDitherType = WICBitmapDitherTypeSolid;
92 ENUM!{enum WICBitmapAlphaChannelOption {
93     WICBitmapUseAlpha = 0,
94     WICBitmapUsePremultipliedAlpha = 0x1,
95     WICBitmapIgnoreAlpha = 0x2,
96 }}
97 FLAGS!{enum WICBitmapTransformOptions {
98     WICBitmapTransformRotate0 = 0,
99     WICBitmapTransformRotate90 = 0x1,
100     WICBitmapTransformRotate180 = 0x2,
101     WICBitmapTransformRotate270 = 0x3,
102     WICBitmapTransformFlipHorizontal = 0x8,
103     WICBitmapTransformFlipVertical = 0x10,
104 }}
105 FLAGS!{enum WICBitmapLockFlags {
106     WICBitmapLockRead = 0x1,
107     WICBitmapLockWrite = 0x2,
108 }}
109 FLAGS!{enum WICBitmapDecoderCapabilities {
110     WICBitmapDecoderCapabilitySameEncoder = 0x1,
111     WICBitmapDecoderCapabilityCanDecodeAllImages = 0x2,
112     WICBitmapDecoderCapabilityCanDecodeSomeImages = 0x4,
113     WICBitmapDecoderCapabilityCanEnumerateMetadata = 0x8,
114     WICBitmapDecoderCapabilityCanDecodeThumbnail = 0x10,
115 }}
116 FLAGS!{enum WICProgressOperation {
117     WICProgressOperationCopyPixels = 0x1,
118     WICProgressOperationWritePixels = 0x2,
119     WICProgressOperationAll = 0xffff,
120 }}
121 FLAGS!{enum WICProgressNotification {
122     WICProgressNotificationBegin = 0x10000,
123     WICProgressNotificationEnd = 0x20000,
124     WICProgressNotificationFrequent = 0x40000,
125     WICProgressNotificationAll = 0xffff0000,
126 }}
127 FLAGS!{enum WICComponentSigning {
128     WICComponentSigned = 0x1,
129     WICComponentUnsigned = 0x2,
130     WICComponentSafe = 0x4,
131     WICComponentDisabled = 0x80000000,
132 }}
133 ENUM!{enum WICGifLogicalScreenDescriptorProperties {
134     WICGifLogicalScreenSignature = 0x1,
135     WICGifLogicalScreenDescriptorWidth = 0x2,
136     WICGifLogicalScreenDescriptorHeight = 0x3,
137     WICGifLogicalScreenDescriptorGlobalColorTableFlag = 0x4,
138     WICGifLogicalScreenDescriptorColorResolution = 0x5,
139     WICGifLogicalScreenDescriptorSortFlag = 0x6,
140     WICGifLogicalScreenDescriptorGlobalColorTableSize = 0x7,
141     WICGifLogicalScreenDescriptorBackgroundColorIndex = 0x8,
142     WICGifLogicalScreenDescriptorPixelAspectRatio = 0x9,
143 }}
144 ENUM!{enum WICGifImageDescriptorProperties {
145     WICGifImageDescriptorLeft = 0x1,
146     WICGifImageDescriptorTop = 0x2,
147     WICGifImageDescriptorWidth = 0x3,
148     WICGifImageDescriptorHeight = 0x4,
149     WICGifImageDescriptorLocalColorTableFlag = 0x5,
150     WICGifImageDescriptorInterlaceFlag = 0x6,
151     WICGifImageDescriptorSortFlag = 0x7,
152     WICGifImageDescriptorLocalColorTableSize = 0x8,
153 }}
154 ENUM!{enum WICGifGraphicControlExtensionProperties {
155     WICGifGraphicControlExtensionDisposal = 0x1,
156     WICGifGraphicControlExtensionUserInputFlag = 0x2,
157     WICGifGraphicControlExtensionTransparencyFlag = 0x3,
158     WICGifGraphicControlExtensionDelay = 0x4,
159     WICGifGraphicControlExtensionTransparentColorIndex = 0x5,
160 }}
161 ENUM!{enum WICGifApplicationExtensionProperties {
162     WICGifApplicationExtensionApplication = 0x1,
163     WICGifApplicationExtensionData = 0x2,
164 }}
165 ENUM!{enum WICGifCommentExtensionProperties {
166     WICGifCommentExtensionText = 0x1,
167 }}
168 ENUM!{enum WICJpegCommentProperties {
169     WICJpegCommentText = 0x1,
170 }}
171 ENUM!{enum WICJpegLuminanceProperties {
172     WICJpegLuminanceTable = 0x1,
173 }}
174 ENUM!{enum WICJpegChrominanceProperties {
175     WICJpegChrominanceTable = 0x1,
176 }}
177 ENUM!{enum WIC8BIMIptcProperties {
178     WIC8BIMIptcPString = 0,
179     WIC8BIMIptcEmbeddedIPTC = 0x1,
180 }}
181 ENUM!{enum WIC8BIMResolutionInfoProperties {
182     WIC8BIMResolutionInfoPString = 0x1,
183     WIC8BIMResolutionInfoHResolution = 0x2,
184     WIC8BIMResolutionInfoHResolutionUnit = 0x3,
185     WIC8BIMResolutionInfoWidthUnit = 0x4,
186     WIC8BIMResolutionInfoVResolution = 0x5,
187     WIC8BIMResolutionInfoVResolutionUnit = 0x6,
188     WIC8BIMResolutionInfoHeightUnit = 0x7,
189 }}
190 ENUM!{enum WIC8BIMIptcDigestProperties {
191     WIC8BIMIptcDigestPString = 0x1,
192     WIC8BIMIptcDigestIptcDigest = 0x2,
193 }}
194 ENUM!{enum WICPngGamaProperties {
195     WICPngGamaGamma = 0x1,
196 }}
197 ENUM!{enum WICPngBkgdProperties {
198     WICPngBkgdBackgroundColor = 0x1,
199 }}
200 ENUM!{enum WICPngItxtProperties {
201     WICPngItxtKeyword = 0x1,
202     WICPngItxtCompressionFlag = 0x2,
203     WICPngItxtLanguageTag = 0x3,
204     WICPngItxtTranslatedKeyword = 0x4,
205     WICPngItxtText = 0x5,
206 }}
207 ENUM!{enum WICPngChrmProperties {
208     WICPngChrmWhitePointX = 0x1,
209     WICPngChrmWhitePointY = 0x2,
210     WICPngChrmRedX = 0x3,
211     WICPngChrmRedY = 0x4,
212     WICPngChrmGreenX = 0x5,
213     WICPngChrmGreenY = 0x6,
214     WICPngChrmBlueX = 0x7,
215     WICPngChrmBlueY = 0x8,
216 }}
217 ENUM!{enum WICPngHistProperties {
218     WICPngHistFrequencies = 0x1,
219 }}
220 ENUM!{enum WICPngIccpProperties {
221     WICPngIccpProfileName = 0x1,
222     WICPngIccpProfileData = 0x2,
223 }}
224 ENUM!{enum WICPngSrgbProperties {
225     WICPngSrgbRenderingIntent = 0x1,
226 }}
227 ENUM!{enum WICPngTimeProperties {
228     WICPngTimeYear = 0x1,
229     WICPngTimeMonth = 0x2,
230     WICPngTimeDay = 0x3,
231     WICPngTimeHour = 0x4,
232     WICPngTimeMinute = 0x5,
233     WICPngTimeSecond = 0x6,
234 }}
235 ENUM!{enum WICSectionAccessLevel {
236     WICSectionAccessLevelRead = 0x1,
237     WICSectionAccessLevelReadWrite = 0x3,
238 }}
239 ENUM!{enum WICPixelFormatNumericRepresentation {
240     WICPixelFormatNumericRepresentationUnspecified = 0,
241     WICPixelFormatNumericRepresentationIndexed = 0x1,
242     WICPixelFormatNumericRepresentationUnsignedInteger = 0x2,
243     WICPixelFormatNumericRepresentationSignedInteger = 0x3,
244     WICPixelFormatNumericRepresentationFixed = 0x4,
245     WICPixelFormatNumericRepresentationFloat = 0x5,
246 }}
247 ENUM!{enum WICPlanarOptions {
248     WICPlanarOptionsDefault = 0,
249     WICPlanarOptionsPreserveSubsampling = 0x1,
250 }}
251 #[allow(unused_qualifications)]
252 STRUCT!{struct WICImageParameters {
253     PixelFormat: ::D2D1_PIXEL_FORMAT,
254     DpiX: ::FLOAT,
255     DpiY: ::FLOAT,
256     Top: ::FLOAT,
257     Left: ::FLOAT,
258     PixelWidth: ::FLOAT,
259     PixelHeight: ::FLOAT,
260 }}
261 #[allow(unused_qualifications)]
262 STRUCT!{struct WICBitmapPlaneDescription {
263     Format: WICPixelFormatGUID,
264     Width: ::UINT,
265     Height: ::UINT,
266 }}
267 #[allow(unused_qualifications)]
268 STRUCT!{struct WICBitmapPlane {
269     Format: WICPixelFormatGUID,
270     pbBuffer: *mut ::BYTE,
271     cbStride: ::UINT,
272     cbBufferSize: ::UINT,
273 }}
274 RIDL!(
275 interface IWICPalette(IWICPaletteVtbl): IUnknown(IUnknownVtbl) {
276     fn InitializePredefined(
277         &mut self, ePaletteType: WICBitmapPaletteType, fAddTransparentColor: ::BOOL
278     ) -> ::HRESULT,
279     fn InitializeCustom(&mut self, pColors: *mut WICColor, cCount: ::UINT) -> ::HRESULT,
280     fn InitializeFromBitmap(
281         &mut self, pISurface: *mut IWICBitmapSource, cCount: ::UINT, fAddTransparentColor: ::BOOL
282     ) -> ::HRESULT,
283     fn InitializeFromPalette(&mut self, pIPalette: *mut IWICPalette) -> ::HRESULT,
284     fn GetType(&mut self, pePaletteType: *mut WICBitmapPaletteType) -> ::HRESULT,
285     fn GetColorCount(&mut self, pcCount: *mut ::UINT) -> ::HRESULT,
286     fn GetColors(
287         &mut self, cCount: ::UINT, pColros: *mut WICColor, pcActualColors: *mut ::UINT
288     ) -> ::HRESULT,
289     fn IsBlackWhite(&mut self, pfIsBlackWhite: *mut ::BOOL) -> ::HRESULT,
290     fn IsGrayscale(&mut self, pfIsGrayscale: *mut ::BOOL) -> ::HRESULT,
291     fn HasAlpha(&mut self, pfHasAlpha: *mut ::BOOL) -> ::HRESULT
292 });
293 RIDL!(
294 interface IWICBitmapSource(IWICBitmapSourceVtbl): IUnknown(IUnknownVtbl) {
295     fn GetSize(&mut self, puiWidth: *mut ::UINT, puiHeight: ::UINT) -> ::HRESULT,
296     fn GetPixelFormat(&mut self, pPixelFormat: *mut WICPixelFormatGUID) -> ::HRESULT,
297     fn GetResolution(&mut self, pDpiX: *mut f64, pDpiY: *mut f64) -> ::HRESULT,
298     fn CopyPalette(&mut self, pIPalette: *mut IWICPalette) -> ::HRESULT,
299     fn CopyPixels(
300         &mut self, prc: *const WICRect, cbStride: ::UINT, cbBufferSize: ::UINT,
301         pbBuffer: *mut ::BYTE
302     ) -> ::HRESULT
303 });
304 RIDL!(
305 interface IWICFormatConverter(IWICFormatConverterVtbl): IWICBitmapSource(IWICBitmapSourceVtbl) {
306     fn Initialize(
307         &mut self, pISource: *mut IWICBitmapSource, dstFormat: REFWICPixelFormatGUID,
308         dither: WICBitmapDitherType, pIPalette: *mut IWICPalette, alphaThreasholdPercent: f64,
309         paletteTranslate: WICBitmapPaletteType
310     ) -> ::HRESULT,
311     fn CanConvert(
312         &mut self, srcPixelFormat: REFWICPixelFormatGUID, dstPixelFormat: REFWICPixelFormatGUID,
313         pfCanConvert: *mut ::BOOL
314     ) -> ::HRESULT
315 });
316 RIDL!(
317 interface IWICPlanarFormatConverter(IWICPlanarFormatConverterVtbl)
318     : IWICBitmapSource(IWICBitmapSourceVtbl) {
319     fn Initialize(
320         &mut self, ppPlanes: *mut *mut IWICBitmapSource, cPlanes: ::UINT,
321         dstFormat: REFWICPixelFormatGUID, dither: WICBitmapDitherType, pIPalette: *mut IWICPalette,
322         alphaThreasholdPercent: f64, paletteTranslate: WICBitmapPaletteType
323     ) -> ::HRESULT,
324     fn CanConvert(
325         &mut self, pSrcPixelFormats: *const WICPixelFormatGUID, cSrcPlanes: ::UINT,
326         dstPixelFormat: REFWICPixelFormatGUID, pfCanConvert: *mut ::BOOL
327     ) -> ::HRESULT
328 });
329 RIDL!(
330 interface IWICBitmapScaler(IWICBitmapScalerVtbl): IWICBitmapSource(IWICBitmapSourceVtbl) {
331     fn Initialize(
332         &mut self, pISource: *mut IWICBitmapSource, uiWidth: ::UINT, uiHeight: ::UINT,
333         mode: WICBitmapInterpolationMode
334     ) -> ::HRESULT
335 });
336 RIDL!(
337 interface IWICBitmapClipper(IWICBitmapClipperVtbl): IWICBitmapSource(IWICBitmapSourceVtbl) {
338     fn Initialize(&mut self, pISource: *mut IWICBitmapSource, prc: *const WICRect) -> ::HRESULT
339 });
340 RIDL!(
341 interface IWICBitmapFlipRotator(IWICBitmapFlipRotatorVtbl)
342     : IWICBitmapSource(IWICBitmapSourceVtbl) {
343     fn Initialize(
344         &mut self, pISource: *mut IWICBitmapSource, options: WICBitmapTransformOptions
345     ) -> ::HRESULT
346 });
347 RIDL!(
348 interface IWICBitmapLock(IWICBitmapLockVtbl): IUnknown(IUnknownVtbl) {
349     fn GetSize(&mut self, puiWidth: *mut ::UINT, puiHeight: *mut ::UINT) -> ::HRESULT,
350     fn GetStride(&mut self, pcbStride: *mut ::UINT) -> ::HRESULT,
351     fn GetDataPointer(
352         &mut self, pcbBufferSize: *mut ::UINT, ppbData: *mut WICInProcPointer
353     ) -> ::HRESULT,
354     fn GetPixelFormat(&mut self, pPixelFormat: *mut WICPixelFormatGUID) -> ::HRESULT
355 });
356 RIDL!(
357 interface IWICBitmap(IWICBitmapVtbl): IWICBitmapSource(IWICBitmapSourceVtbl) {
358     fn Lock(
359         &mut self, prcLock: *const WICRect, flags: ::DWORD, ppILock: *mut *mut IWICBitmapLock
360     ) -> ::HRESULT,
361     fn SetPalette(&mut self, pIPalette: *mut IWICPalette) -> ::HRESULT,
362     fn SetResolution(&mut self, dpiX: f64, dpiY: f64) -> ::HRESULT
363 });
364