ReactOS 0.4.16-dev-753-g705a985
bmpencode.c
Go to the documentation of this file.
1/*
2 * Copyright 2009 Vincent Povirk for CodeWeavers
3 * Copyright 2016 Dmitry Timoshkov
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
18 */
19
20#include <stdarg.h>
21
22#define COBJMACROS
23
24#include "windef.h"
25#include "winbase.h"
26#include "winreg.h"
27#include "wingdi.h"
28#include "objbase.h"
29
30#include "wincodecs_private.h"
31
32#include "wine/debug.h"
33
35
39 UINT colors; /* palette size */
45};
46
47static const struct bmp_pixelformat formats[] = {
48 {&GUID_WICPixelFormat24bppBGR, 24, 0, BI_RGB},
49 {&GUID_WICPixelFormatBlackWhite, 1, 2, BI_RGB},
50 {&GUID_WICPixelFormat1bppIndexed, 1, 2, BI_RGB},
51 {&GUID_WICPixelFormat2bppIndexed, 2, 4, BI_RGB},
52 {&GUID_WICPixelFormat4bppIndexed, 4, 16, BI_RGB},
53 {&GUID_WICPixelFormat8bppIndexed, 8, 256, BI_RGB},
54 {&GUID_WICPixelFormat16bppBGR555, 16, 0, BI_RGB},
55 {&GUID_WICPixelFormat16bppBGR565, 16, 0, BI_BITFIELDS, 0xf800, 0x7e0, 0x1f, 0},
56 {&GUID_WICPixelFormat32bppBGR, 32, 0, BI_RGB},
57 {&GUID_WICPixelFormat32bppBGRA, 32, 0, BI_BITFIELDS, 0xff0000, 0xff00, 0xff, 0xff000000},
58 {NULL}
59};
60
61typedef struct BmpFrameEncode {
68 const struct bmp_pixelformat *format;
69 double xres, yres;
76
78{
79 return CONTAINING_RECORD(iface, BmpFrameEncode, IWICBitmapFrameEncode_iface);
80}
81
83 void **ppv)
84{
86 TRACE("(%p,%s,%p)\n", iface, debugstr_guid(iid), ppv);
87
88 if (!ppv) return E_INVALIDARG;
89
90 if (IsEqualIID(&IID_IUnknown, iid) ||
91 IsEqualIID(&IID_IWICBitmapFrameEncode, iid))
92 {
93 *ppv = &This->IWICBitmapFrameEncode_iface;
94 }
95 else
96 {
97 *ppv = NULL;
98 return E_NOINTERFACE;
99 }
100
101 IUnknown_AddRef((IUnknown*)*ppv);
102 return S_OK;
103}
104
106{
109
110 TRACE("(%p) refcount=%lu\n", iface, ref);
111
112 return ref;
113}
114
116{
119
120 TRACE("(%p) refcount=%lu\n", iface, ref);
121
122 if (ref == 0)
123 {
124 if (This->stream) IStream_Release(This->stream);
125 free(This->bits);
126 free(This);
127 }
128
129 return ref;
130}
131
133 IPropertyBag2 *pIEncoderOptions)
134{
136 TRACE("(%p,%p)\n", iface, pIEncoderOptions);
137
138 if (This->initialized) return WINCODEC_ERR_WRONGSTATE;
139
140 if (pIEncoderOptions)
141 WARN("ignoring encoder options.\n");
142
143 This->initialized = TRUE;
144
145 return S_OK;
146}
147
149 UINT uiWidth, UINT uiHeight)
150{
152 TRACE("(%p,%u,%u)\n", iface, uiWidth, uiHeight);
153
154 if (!This->initialized || This->bits) return WINCODEC_ERR_WRONGSTATE;
155
156 This->width = uiWidth;
157 This->height = uiHeight;
158
159 return S_OK;
160}
161
163 double dpiX, double dpiY)
164{
166 TRACE("(%p,%0.2f,%0.2f)\n", iface, dpiX, dpiY);
167
168 if (!This->initialized || This->bits) return WINCODEC_ERR_WRONGSTATE;
169
170 This->xres = dpiX;
171 This->yres = dpiY;
172
173 return S_OK;
174}
175
177 WICPixelFormatGUID *pPixelFormat)
178{
180 int i;
181 TRACE("(%p,%s)\n", iface, debugstr_guid(pPixelFormat));
182
183 if (!This->initialized || This->bits) return WINCODEC_ERR_WRONGSTATE;
184
185 if (IsEqualGUID(pPixelFormat, &GUID_WICPixelFormatBlackWhite))
186 *pPixelFormat = GUID_WICPixelFormat1bppIndexed;
187 else if (IsEqualGUID(pPixelFormat, &GUID_WICPixelFormat2bppIndexed))
188 *pPixelFormat = GUID_WICPixelFormat4bppIndexed;
189
190 for (i=0; formats[i].guid; i++)
191 {
192 if (IsEqualGUID(formats[i].guid, pPixelFormat))
193 break;
194 }
195
196 if (!formats[i].guid) i = 0;
197
198 This->format = &formats[i];
199 memcpy(pPixelFormat, This->format->guid, sizeof(GUID));
200
201 return S_OK;
202}
203
205 UINT cCount, IWICColorContext **ppIColorContext)
206{
207 FIXME("(%p,%u,%p): stub\n", iface, cCount, ppIColorContext);
208 return E_NOTIMPL;
209}
210
213{
215 HRESULT hr;
216
217 TRACE("(%p,%p)\n", iface, palette);
218
219 if (!palette) return E_INVALIDARG;
220
221 if (!This->initialized)
223
224 hr = IWICPalette_GetColors(palette, 256, This->palette, &This->colors);
225 if (hr == S_OK)
226 {
227 UINT i;
228 for (i = 0; i < This->colors; i++)
229 This->palette[i] |= 0xff000000; /* BMP palette has no alpha */
230 }
231 return hr;
232}
233
235 IWICBitmapSource *pIThumbnail)
236{
237 FIXME("(%p,%p): stub\n", iface, pIThumbnail);
239}
240
242{
243 if (!This->bits)
244 {
245 if (!This->initialized || !This->width || !This->height || !This->format)
247
248 This->stride = (((This->width * This->format->bpp)+31)/32)*4;
249 This->bits = calloc(This->stride, This->height);
250 if (!This->bits) return E_OUTOFMEMORY;
251 }
252
253 return S_OK;
254}
255
257 UINT lineCount, UINT cbStride, UINT cbBufferSize, BYTE *pbPixels)
258{
260 UINT dstbuffersize, bytesperrow, row;
261 BYTE *dst, *src;
262 HRESULT hr;
263
264 TRACE("(%p,%u,%u,%u,%p)\n", iface, lineCount, cbStride, cbBufferSize, pbPixels);
265
266 if (!This->initialized || !This->width || !This->height || !This->format)
268
270 if (FAILED(hr)) return hr;
271
272 bytesperrow = ((This->format->bpp * This->width) + 7) / 8;
273
274 if (This->stride < bytesperrow)
275 return E_INVALIDARG;
276
277 dstbuffersize = This->stride * (This->height - This->lineswritten);
278 if ((This->stride * (lineCount - 1)) + bytesperrow > dstbuffersize)
279 return E_INVALIDARG;
280
281 src = pbPixels;
282 dst = This->bits + This->stride * (This->height - This->lineswritten - 1);
283 for (row = 0; row < lineCount; row++)
284 {
285 memcpy(dst, src, bytesperrow);
286 src += cbStride;
287 dst -= This->stride;
288 }
289
290 This->lineswritten += lineCount;
291
292 return S_OK;
293}
294
296 IWICBitmapSource *pIBitmapSource, WICRect *prc)
297{
299 HRESULT hr;
300 TRACE("(%p,%p,%s)\n", iface, pIBitmapSource, debug_wic_rect(prc));
301
302 if (!This->initialized)
304
305 hr = configure_write_source(iface, pIBitmapSource, prc,
306 This->format ? This->format->guid : NULL, This->width, This->height,
307 This->xres, This->yres);
308
309 if (SUCCEEDED(hr))
310 {
311 hr = write_source(iface, pIBitmapSource, prc,
312 This->format->guid, This->format->bpp, !This->colors && This->format->colors,
313 This->width, This->height);
314 }
315
316 return hr;
317}
318
320{
323 BITMAPV5HEADER bih;
324 UINT info_size;
326 ULONG byteswritten;
327 HRESULT hr;
328
329 TRACE("(%p)\n", iface);
330
331 if (!This->bits || This->committed || This->height != This->lineswritten)
333
334 bfh.bfType = 0x4d42; /* "BM" */
335 bfh.bfReserved1 = 0;
336 bfh.bfReserved2 = 0;
337
338 bih.bV5Size = info_size = sizeof(BITMAPINFOHEADER);
339 bih.bV5Width = This->width;
340 bih.bV5Height = This->height;
341 bih.bV5Planes = 1;
342 bih.bV5BitCount = This->format->bpp;
343 bih.bV5Compression = This->format->compression;
344 bih.bV5SizeImage = This->stride*This->height;
345 bih.bV5XPelsPerMeter = (This->xres+0.0127) / 0.0254;
346 bih.bV5YPelsPerMeter = (This->yres+0.0127) / 0.0254;
347 bih.bV5ClrUsed = (This->format->bpp <= 8) ? This->colors : 0;
348 bih.bV5ClrImportant = bih.bV5ClrUsed;
349
350 if (This->format->compression == BI_BITFIELDS)
351 {
352 if (This->format->alphamask)
353 bih.bV5Size = info_size = sizeof(BITMAPV4HEADER);
354 else
355 info_size = sizeof(BITMAPINFOHEADER)+12;
356 bih.bV5RedMask = This->format->redmask;
357 bih.bV5GreenMask = This->format->greenmask;
358 bih.bV5BlueMask = This->format->bluemask;
359 bih.bV5AlphaMask = This->format->alphamask;
360 bih.bV5CSType = LCS_DEVICE_RGB;
361 }
362
363 bfh.bfSize = sizeof(BITMAPFILEHEADER) + info_size + bih.bV5SizeImage;
364 bfh.bfOffBits = sizeof(BITMAPFILEHEADER) + info_size;
365 bfh.bfOffBits += bih.bV5ClrUsed * sizeof(WICColor);
366
367 pos.QuadPart = 0;
368 hr = IStream_Seek(This->stream, pos, STREAM_SEEK_SET, NULL);
369 if (FAILED(hr)) return hr;
370
371 hr = IStream_Write(This->stream, &bfh, sizeof(BITMAPFILEHEADER), &byteswritten);
372 if (FAILED(hr)) return hr;
373 if (byteswritten != sizeof(BITMAPFILEHEADER)) return E_FAIL;
374
375 hr = IStream_Write(This->stream, &bih, info_size, &byteswritten);
376 if (FAILED(hr)) return hr;
377 if (byteswritten != info_size) return E_FAIL;
378
379 /* write the palette */
380 if (This->format->colors)
381 {
382 hr = IStream_Write(This->stream, This->palette, This->colors * sizeof(WICColor), &byteswritten);
383 if (FAILED(hr)) return hr;
384 if (byteswritten != This->colors * sizeof(WICColor)) return E_FAIL;
385 }
386
387 hr = IStream_Write(This->stream, This->bits, bih.bV5SizeImage, &byteswritten);
388 if (FAILED(hr)) return hr;
389 if (byteswritten != bih.bV5SizeImage) return E_FAIL;
390
391 This->committed = TRUE;
392
393 return S_OK;
394}
395
397 IWICMetadataQueryWriter **query_writer)
398{
400
401 TRACE("iface %p, query_writer %p.\n", iface, query_writer);
402
403 if (!encoder->initialized)
405
407}
408
409static const IWICBitmapFrameEncodeVtbl BmpFrameEncode_Vtbl = {
424};
425
426typedef struct BmpEncoder {
432
434{
435 return CONTAINING_RECORD(iface, BmpEncoder, IWICBitmapEncoder_iface);
436}
437
439 void **ppv)
440{
442 TRACE("(%p,%s,%p)\n", iface, debugstr_guid(iid), ppv);
443
444 if (!ppv) return E_INVALIDARG;
445
446 if (IsEqualIID(&IID_IUnknown, iid) ||
447 IsEqualIID(&IID_IWICBitmapEncoder, iid))
448 {
449 *ppv = &This->IWICBitmapEncoder_iface;
450 }
451 else
452 {
453 *ppv = NULL;
454 return E_NOINTERFACE;
455 }
456
457 IUnknown_AddRef((IUnknown*)*ppv);
458 return S_OK;
459}
460
462{
465
466 TRACE("(%p) refcount=%lu\n", iface, ref);
467
468 return ref;
469}
470
472{
475
476 TRACE("(%p) refcount=%lu\n", iface, ref);
477
478 if (ref == 0)
479 {
480 if (This->stream) IStream_Release(This->stream);
481 if (This->frame) IWICBitmapFrameEncode_Release(&This->frame->IWICBitmapFrameEncode_iface);
482 free(This);
483 }
484
485 return ref;
486}
487
489 IStream *pIStream, WICBitmapEncoderCacheOption cacheOption)
490{
492
493 TRACE("(%p,%p,%u)\n", iface, pIStream, cacheOption);
494
495 IStream_AddRef(pIStream);
496 This->stream = pIStream;
497
498 return S_OK;
499}
500
502 GUID *pguidContainerFormat)
503{
504 TRACE("(%p,%p)\n", iface, pguidContainerFormat);
505
506 if (!pguidContainerFormat)
507 return E_INVALIDARG;
508
509 memcpy(pguidContainerFormat, &GUID_ContainerFormatBmp, sizeof(GUID));
510 return S_OK;
511}
512
514{
515 IWICComponentInfo *comp_info;
516 HRESULT hr;
517
518 TRACE("%p,%p\n", iface, info);
519
520 if (!info) return E_INVALIDARG;
521
522 hr = CreateComponentInfo(&CLSID_WICBmpEncoder, &comp_info);
523 if (hr == S_OK)
524 {
525 hr = IWICComponentInfo_QueryInterface(comp_info, &IID_IWICBitmapEncoderInfo, (void **)info);
526 IWICComponentInfo_Release(comp_info);
527 }
528 return hr;
529}
530
532 UINT cCount, IWICColorContext **ppIColorContext)
533{
534 FIXME("(%p,%u,%p): stub\n", iface, cCount, ppIColorContext);
535 return E_NOTIMPL;
536}
537
539{
541
542 TRACE("(%p,%p)\n", iface, palette);
544}
545
547{
548 TRACE("(%p,%p)\n", iface, pIThumbnail);
550}
551
553{
554 TRACE("(%p,%p)\n", iface, pIPreview);
556}
557
559 IWICBitmapFrameEncode **ppIFrameEncode, IPropertyBag2 **ppIEncoderOptions)
560{
562 BmpFrameEncode *encode;
563 HRESULT hr;
564 static const PROPBAG2 opts[1] =
565 {
566 { PROPBAG2_TYPE_DATA, VT_BOOL, 0, 0, (LPOLESTR)L"EnableV5Header32bppBGRA" },
567 };
568
569 TRACE("(%p,%p,%p)\n", iface, ppIFrameEncode, ppIEncoderOptions);
570
571 if (This->frame) return WINCODEC_ERR_UNSUPPORTEDOPERATION;
572
573 if (!This->stream) return WINCODEC_ERR_NOTINITIALIZED;
574
575 if (ppIEncoderOptions)
576 {
577 hr = CreatePropertyBag2(opts, ARRAY_SIZE(opts), ppIEncoderOptions);
578 if (FAILED(hr)) return hr;
579 }
580
581 encode = malloc(sizeof(BmpFrameEncode));
582 if (!encode)
583 {
584 IPropertyBag2_Release(*ppIEncoderOptions);
585 *ppIEncoderOptions = NULL;
586 return E_OUTOFMEMORY;
587 }
589 encode->ref = 2;
590 IStream_AddRef(This->stream);
591 encode->stream = This->stream;
592 encode->initialized = FALSE;
593 encode->width = 0;
594 encode->height = 0;
595 encode->bits = NULL;
596 encode->format = NULL;
597 encode->xres = 0.0;
598 encode->yres = 0.0;
599 encode->lineswritten = 0;
600 encode->colors = 0;
601 encode->committed = FALSE;
602
603 *ppIFrameEncode = &encode->IWICBitmapFrameEncode_iface;
604 This->frame = encode;
605
606 return S_OK;
607}
608
610{
612 TRACE("(%p)\n", iface);
613
614 if (!This->frame || !This->frame->committed) return WINCODEC_ERR_WRONGSTATE;
615
616 return S_OK;
617}
618
620 IWICMetadataQueryWriter **ppIMetadataQueryWriter)
621{
622 FIXME("(%p,%p): stub\n", iface, ppIMetadataQueryWriter);
623 return E_NOTIMPL;
624}
625
626static const IWICBitmapEncoderVtbl BmpEncoder_Vtbl = {
640};
641
643{
645 HRESULT ret;
646
647 TRACE("(%s,%p)\n", debugstr_guid(iid), ppv);
648
649 *ppv = NULL;
650
651 This = malloc(sizeof(BmpEncoder));
652 if (!This) return E_OUTOFMEMORY;
653
654 This->IWICBitmapEncoder_iface.lpVtbl = &BmpEncoder_Vtbl;
655 This->ref = 1;
656 This->stream = NULL;
657 This->frame = NULL;
658
659 ret = IWICBitmapEncoder_QueryInterface(&This->IWICBitmapEncoder_iface, iid, ppv);
660 IWICBitmapEncoder_Release(&This->IWICBitmapEncoder_iface);
661
662 return ret;
663}
#define InterlockedIncrement
Definition: armddk.h:53
#define InterlockedDecrement
Definition: armddk.h:52
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define ARRAY_SIZE(A)
Definition: main.h:20
#define FIXME(fmt,...)
Definition: precomp.h:53
#define WARN(fmt,...)
Definition: precomp.h:61
const GUID IID_IUnknown
static HRESULT WINAPI BmpEncoder_GetEncoderInfo(IWICBitmapEncoder *iface, IWICBitmapEncoderInfo **info)
Definition: bmpencode.c:513
static HRESULT WINAPI BmpFrameEncode_WritePixels(IWICBitmapFrameEncode *iface, UINT lineCount, UINT cbStride, UINT cbBufferSize, BYTE *pbPixels)
Definition: bmpencode.c:256
static ULONG WINAPI BmpEncoder_Release(IWICBitmapEncoder *iface)
Definition: bmpencode.c:471
static HRESULT WINAPI BmpEncoder_CreateNewFrame(IWICBitmapEncoder *iface, IWICBitmapFrameEncode **ppIFrameEncode, IPropertyBag2 **ppIEncoderOptions)
Definition: bmpencode.c:558
static BmpFrameEncode * impl_from_IWICBitmapFrameEncode(IWICBitmapFrameEncode *iface)
Definition: bmpencode.c:77
static HRESULT WINAPI BmpFrameEncode_SetThumbnail(IWICBitmapFrameEncode *iface, IWICBitmapSource *pIThumbnail)
Definition: bmpencode.c:234
static ULONG WINAPI BmpFrameEncode_AddRef(IWICBitmapFrameEncode *iface)
Definition: bmpencode.c:105
static const IWICBitmapEncoderVtbl BmpEncoder_Vtbl
Definition: bmpencode.c:626
static ULONG WINAPI BmpFrameEncode_Release(IWICBitmapFrameEncode *iface)
Definition: bmpencode.c:115
static HRESULT WINAPI BmpEncoder_SetThumbnail(IWICBitmapEncoder *iface, IWICBitmapSource *pIThumbnail)
Definition: bmpencode.c:546
static HRESULT WINAPI BmpFrameEncode_SetPalette(IWICBitmapFrameEncode *iface, IWICPalette *palette)
Definition: bmpencode.c:211
HRESULT BmpEncoder_CreateInstance(REFIID iid, void **ppv)
Definition: bmpencode.c:642
static HRESULT WINAPI BmpFrameEncode_SetSize(IWICBitmapFrameEncode *iface, UINT uiWidth, UINT uiHeight)
Definition: bmpencode.c:148
static HRESULT WINAPI BmpEncoder_Initialize(IWICBitmapEncoder *iface, IStream *pIStream, WICBitmapEncoderCacheOption cacheOption)
Definition: bmpencode.c:488
static HRESULT WINAPI BmpFrameEncode_SetPixelFormat(IWICBitmapFrameEncode *iface, WICPixelFormatGUID *pPixelFormat)
Definition: bmpencode.c:176
static HRESULT WINAPI BmpEncoder_SetColorContexts(IWICBitmapEncoder *iface, UINT cCount, IWICColorContext **ppIColorContext)
Definition: bmpencode.c:531
static HRESULT WINAPI BmpFrameEncode_WriteSource(IWICBitmapFrameEncode *iface, IWICBitmapSource *pIBitmapSource, WICRect *prc)
Definition: bmpencode.c:295
static HRESULT WINAPI BmpEncoder_SetPreview(IWICBitmapEncoder *iface, IWICBitmapSource *pIPreview)
Definition: bmpencode.c:552
static HRESULT WINAPI BmpFrameEncode_SetResolution(IWICBitmapFrameEncode *iface, double dpiX, double dpiY)
Definition: bmpencode.c:162
static HRESULT WINAPI BmpEncoder_Commit(IWICBitmapEncoder *iface)
Definition: bmpencode.c:609
static HRESULT WINAPI BmpEncoder_GetMetadataQueryWriter(IWICBitmapEncoder *iface, IWICMetadataQueryWriter **ppIMetadataQueryWriter)
Definition: bmpencode.c:619
static HRESULT WINAPI BmpFrameEncode_SetColorContexts(IWICBitmapFrameEncode *iface, UINT cCount, IWICColorContext **ppIColorContext)
Definition: bmpencode.c:204
static HRESULT BmpFrameEncode_AllocateBits(BmpFrameEncode *This)
Definition: bmpencode.c:241
static ULONG WINAPI BmpEncoder_AddRef(IWICBitmapEncoder *iface)
Definition: bmpencode.c:461
static HRESULT WINAPI BmpEncoder_SetPalette(IWICBitmapEncoder *iface, IWICPalette *palette)
Definition: bmpencode.c:538
static HRESULT WINAPI BmpFrameEncode_Initialize(IWICBitmapFrameEncode *iface, IPropertyBag2 *pIEncoderOptions)
Definition: bmpencode.c:132
static HRESULT WINAPI BmpEncoder_GetContainerFormat(IWICBitmapEncoder *iface, GUID *pguidContainerFormat)
Definition: bmpencode.c:501
static HRESULT WINAPI BmpEncoder_QueryInterface(IWICBitmapEncoder *iface, REFIID iid, void **ppv)
Definition: bmpencode.c:438
static const struct bmp_pixelformat formats[]
Definition: bmpencode.c:47
static const IWICBitmapFrameEncodeVtbl BmpFrameEncode_Vtbl
Definition: bmpencode.c:409
static HRESULT WINAPI BmpFrameEncode_Commit(IWICBitmapFrameEncode *iface)
Definition: bmpencode.c:319
static HRESULT WINAPI BmpFrameEncode_QueryInterface(IWICBitmapFrameEncode *iface, REFIID iid, void **ppv)
Definition: bmpencode.c:82
static HRESULT WINAPI BmpFrameEncode_GetMetadataQueryWriter(IWICBitmapFrameEncode *iface, IWICMetadataQueryWriter **query_writer)
Definition: bmpencode.c:396
static BmpEncoder * impl_from_IWICBitmapEncoder(IWICBitmapEncoder *iface)
Definition: bmpencode.c:433
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_INVALIDARG
Definition: ddrawi.h:101
#define E_NOTIMPL
Definition: ddrawi.h:99
#define E_FAIL
Definition: ddrawi.h:102
#define free
Definition: debug_ros.c:5
#define malloc
Definition: debug_ros.c:4
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
@ VT_BOOL
Definition: compat.h:2306
HRESULT CreateComponentInfo(REFCLSID clsid, IWICComponentInfo **ppIInfo)
Definition: info.c:2030
HRESULT CreatePropertyBag2(const PROPBAG2 *options, UINT count, IPropertyBag2 **ppPropertyBag2)
Definition: propertybag.c:278
struct png_info_def *typedef unsigned char **typedef struct png_info_def *typedef struct png_info_def *typedef struct png_info_def *typedef unsigned char ** row
Definition: typeof.h:78
#define BI_RGB
Definition: precomp.h:56
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
GLenum src
Definition: glext.h:6340
GLenum GLenum dst
Definition: glext.h:6340
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
REFIID LPVOID * ppv
Definition: atlbase.h:39
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
#define debugstr_guid
Definition: kernel32.h:35
if(dx< 0)
Definition: linetemp.h:194
const GUID * guid
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
#define BI_BITFIELDS
Definition: mmreg.h:507
static LPOLESTR
Definition: stg_prop.c:27
static HPALETTE palette
Definition: clipboard.c:1345
unsigned int UINT
Definition: ndis.h:50
_Out_ LPRECT prc
Definition: ntgdi.h:1658
#define L(x)
Definition: ntvdm.h:50
long LONG
Definition: pedump.c:60
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
#define REFIID
Definition: guiddef.h:118
#define calloc
Definition: rosglue.h:14
HRESULT hr
Definition: shlfolder.c:183
#define TRACE(s)
Definition: solgame.cpp:4
LONG ref
Definition: bmpencode.c:428
IStream * stream
Definition: bmpencode.c:429
BmpFrameEncode * frame
Definition: bmpencode.c:430
IWICBitmapEncoder IWICBitmapEncoder_iface
Definition: bmpencode.c:427
UINT lineswritten
Definition: bmpencode.c:70
BOOL committed
Definition: bmpencode.c:74
BOOL initialized
Definition: bmpencode.c:65
const struct bmp_pixelformat * format
Definition: bmpencode.c:68
WICColor palette[256]
Definition: bmpencode.c:72
double yres
Definition: bmpencode.c:69
BYTE * bits
Definition: bmpencode.c:67
IStream * stream
Definition: bmpencode.c:64
IWICBitmapFrameEncode IWICBitmapFrameEncode_iface
Definition: bmpencode.c:62
double xres
Definition: bmpencode.c:69
DWORD compression
Definition: bmpencode.c:40
DWORD greenmask
Definition: bmpencode.c:42
DWORD alphamask
Definition: bmpencode.c:44
const WICPixelFormatGUID * guid
Definition: bmpencode.c:37
DWORD bluemask
Definition: bmpencode.c:43
Definition: send.c:48
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
uint32_t ULONG
Definition: typedefs.h:59
int ret
WICBitmapEncoderCacheOption
Definition: wincodec.idl:70
UINT32 WICColor
Definition: wincodec.idl:364
HRESULT write_source(IWICBitmapFrameEncode *iface, IWICBitmapSource *source, const WICRect *prc, const WICPixelFormatGUID *format, UINT bpp, BOOL need_palette, INT width, INT height)
HRESULT configure_write_source(IWICBitmapFrameEncode *iface, IWICBitmapSource *source, const WICRect *prc, const WICPixelFormatGUID *format, INT width, INT height, double xres, double yres)
static const char * debug_wic_rect(const WICRect *rect)
#define WINAPI
Definition: msvc.h:6
#define WINCODEC_ERR_WRONGSTATE
Definition: winerror.h:3281
#define WINCODEC_ERR_UNSUPPORTEDOPERATION
Definition: winerror.h:3308
#define WINCODEC_ERR_NOTINITIALIZED
Definition: winerror.h:3285
#define E_NOINTERFACE
Definition: winerror.h:2364
struct tagBITMAPFILEHEADER BITMAPFILEHEADER
#define LCS_DEVICE_RGB
Definition: wingdi.h:1098
unsigned char BYTE
Definition: xxhash.c:193