23#define NONAMELESSUNION
45#define PIXELFORMATBPP(x) ((x) ? ((x) >> 8) & 255 : 24)
46#define WMF_PLACEABLE_KEY 0x9ac6cdd7
84 hr = IWICImagingFactory_CreatePalette(
factory, &wic_palette);
89 hr = IWICBitmapFrameDecode_CopyPalette(frame, wic_palette);
101 IWICPalette_GetColorCount(wic_palette, &
count);
105 IWICPalette_GetType(wic_palette, &
type);
124 IWICPalette_HasAlpha(wic_palette, &
alpha);
128 IWICPalette_Release(wic_palette);
130 IWICImagingFactory_Release(
factory);
137 FIXME(
"(%p %p %p %d %p %p): stub\n",
bitmap, effect, roi, useAuxData, auxData, auxDataSize);
149 FIXME(
"(%p %d %p %p %p %p %d %p %p): stub\n", inputBitmaps, numInputs, effect, roi, outputRect, outputBitmap, useAuxData, auxData, auxDataSize);
186 *
r = (pixel>>7&0xf8)|(pixel>>12&0x7);
187 *
g = (pixel>>2&0xf8)|(pixel>>6&0x7);
188 *
b = (pixel<<3&0xf8)|(pixel>>2&0x7);
196 *
r = (pixel>>8&0xf8)|(pixel>>13&0x7);
197 *
g = (pixel>>3&0xfc)|(pixel>>9&0x3);
198 *
b = (pixel<<3&0xf8)|(pixel>>2&0x7);
206 *
r = (pixel>>7&0xf8)|(pixel>>12&0x7);
207 *
g = (pixel>>2&0xf8)|(pixel>>6&0x7);
208 *
b = (pixel<<3&0xf8)|(pixel>>2&0x7);
209 if ((pixel&0x8000) == 0x8000)
250 *
r =
row[
x*4+2] * 255 / *
a;
251 *
g =
row[
x*4+1] * 255 / *
a;
282 *
r =
row[
x*8+5] * 255 / *
a;
283 *
g =
row[
x*8+3] * 255 / *
a;
284 *
b =
row[
x*8+1] * 255 / *
a;
346 FIXME(
"not implemented for format 0x%x\n",
bitmap->format);
361 int best_distance = 0x7fff;
480 *((
UINT64*)(
row)+
x) = (a64<<56)|(a64<<48)|(r64<<40)|(r64<<32)|(g64<<24)|(g64<<16)|(
b64<<8)|
b64;
555 FIXME(
"not implemented for format 0x%x\n",
bitmap->format);
574 memcpy(dst_bits+dst_stride*
y, src_bits+src_stride*
y, widthbytes);
578#define convert_indexed_to_rgb(getpixel_function, setpixel_function) do { \
579 for (y=0; y<height; y++) \
580 for (x=0; x<width; x++) { \
583 BYTE *color = (BYTE *)&argb; \
584 getpixel_function(&index, src_bits+src_stride*y, x); \
585 argb = (palette && index < palette->Count) ? palette->Entries[index] : 0; \
586 setpixel_function(color[2], color[1], color[0], color[3], dst_bits+dst_stride*y, x); \
591#define convert_rgb_to_rgb(getpixel_function, setpixel_function) do { \
592 for (y=0; y<height; y++) \
593 for (x=0; x<width; x++) { \
595 getpixel_function(&r, &g, &b, &a, src_bits+src_stride*y, x); \
596 setpixel_function(r, g, b, a, dst_bits+dst_stride*y, x); \
601#define convert_rgb_to_indexed(getpixel_function, setpixel_function) do { \
602 for (y=0; y<height; y++) \
603 for (x=0; x<width; x++) { \
605 getpixel_function(&r, &g, &b, &a, src_bits+src_stride*y, x); \
606 setpixel_function(r, g, b, a, dst_bits+dst_stride*y, x, palette); \
1018#undef convert_indexed_to_rgb
1019#undef convert_rgb_to_rgb
1040 if(!lockeddata || !
bitmap)
1056 act_rect.
X = act_rect.
Y = 0;
1063 WARN(
"bitmap is already locked and cannot be locked again\n");
1076 lockeddata->
Scan0 =
bitmap->bits + (bitspp / 8) * act_rect.
X +
1117 lockeddata->
Stride = (((act_rect.
Width * bitspp + 7) / 8) + 3) & ~3;
1136 FIXME(
"Cannot copy rows that don't start at a whole byte.\n");
1167 if (!
bitmap || xdpi == 0.0 || ydpi == 0.0)
1170 bitmap->image.xres = xdpi;
1171 bitmap->image.yres = ydpi;
1185 if(!
bitmap || !lockeddata)
1214 FIXME(
"Cannot copy rows that don't start at a whole byte.\n");
1226 ERR(
"failed to convert pixels; this should never happen\n");
1243 TRACE(
"(%f,%f,%f,%f,0x%x,%p,%p)\n",
x,
y,
width,
height,
format, srcBitmap, dstBitmap);
1249 TRACE(
"<-- InvalidParameter\n");
1275 dst_palette = heap_alloc_zero(
sizeof(
UINT) * 2 +
sizeof(
ARGB) * src_palette->
Count);
1284 (*dstBitmap)->image.palette = dst_palette;
1303 TRACE(
"(%i,%i,%i,%i,0x%x,%p,%p)\n",
x,
y,
width,
height,
format, srcBitmap, dstBitmap);
1312 if (!
image || !cloneImage)
1335 result->image.frame_count = 1;
1350 *cloneImage = &
result->image;
1355 WARN(
"GpImage with no image data (metafile in wrong state?)\n");
1397 stride = ((
info->bmiHeader.biWidth *
info->bmiHeader.biBitCount + 31) >> 3) & ~3;
1399 if(
info->bmiHeader.biHeight > 0)
1405 switch(
info->bmiHeader.biBitCount) {
1425 FIXME(
"don't know how to handle %d bpp\n",
info->bmiHeader.biBitCount);
1452 if(!lpBitmapName || !
bitmap)
1473 return ((
b + ((
BYTE)bkgnd * (255 -
alpha) + 127) / 255) |
1474 (
g + ((
BYTE)(bkgnd >> 8) * (255 -
alpha) + 127) / 255) << 8 |
1475 (
r + ((
BYTE)(bkgnd >> 16) * (255 -
alpha) + 127) / 255) << 16 |
1489 TRACE(
"(%p,%p,%x)\n",
bitmap, hbmReturn, background);
1497 bih.
biSize =
sizeof(bih);
1526 if (background & 0xffffff)
1532 if ((*
ptr & 0xff000000) == 0xff000000)
continue;
1618 bih.
biSize =
sizeof(bih);
1635 if (bm.bmBitsPixel == 32)
1643 if ((*
src++ & 0xff000000) != 0)
1646 else has_alpha =
FALSE;
1667 dst_row = lockeddata.
Scan0;
1677 *
dst++ |= 0xff000000;
1679 dst_row += lockeddata.
Stride;
1687 dst_row = lockeddata.
Scan0;
1692 *
dst++ |= 0xff000000;
1693 dst_row += lockeddata.
Stride;
1710 static const BYTE halftone_values[6]={0x00,0x33,0x66,0x99,0xcc,0xff};
1715 entries[
i] = 0xff000000;
1716 if (
i&1) entries[
i] |= 0x800000;
1717 if (
i&2) entries[
i] |= 0x8000;
1718 if (
i&4) entries[
i] |= 0x80;
1722 entries[
i] = 0xffc0c0c0;
1726 entries[
i] = 0xff000000;
1727 if (
i&1) entries[
i] |= 0xff0000;
1728 if (
i&2) entries[
i] |= 0xff00;
1729 if (
i&4) entries[
i] |= 0xff;
1739 entries[
i] = 0xff000000;
1740 entries[
i] |= halftone_values[(
i-40)%6];
1741 entries[
i] |= halftone_values[((
i-40)/6)%6] << 8;
1742 entries[
i] |= halftone_values[((
i-40)/36)%6] << 16;
1764 INT row_size, dib_stride;
1785 dib_stride = (row_size + 3) & ~3;
1823 own_bits =
bits = heap_alloc_zero(
size);
1840 memcpy(&(*bitmap)->image.format, &ImageFormatMemoryBMP,
sizeof(
GUID));
1842 (*bitmap)->image.frame_count = 1;
1843 (*bitmap)->image.current_frame = 0;
1844 (*bitmap)->image.palette =
NULL;
1845 (*bitmap)->image.xres = xres;
1846 (*bitmap)->image.yres = yres;
1847 (*bitmap)->width =
width;
1848 (*bitmap)->height =
height;
1849 (*bitmap)->format =
format;
1850 (*bitmap)->image.decoder =
NULL;
1852 (*bitmap)->hdc =
NULL;
1853 (*bitmap)->bits =
bits;
1854 (*bitmap)->stride =
stride;
1855 (*bitmap)->own_bits = own_bits;
1856 (*bitmap)->metadata_reader =
NULL;
1857 (*bitmap)->prop_count = 0;
1858 (*bitmap)->prop_item =
NULL;
1870 if (!(*bitmap)->image.palette)
1882 (*bitmap)->image.palette->Entries[0] = 0xff000000;
1883 (*bitmap)->image.palette->Entries[1] = 0xffffffff;
1891 (*bitmap)->image.palette->Count);
1901static HBITMAP hbitmap_from_emf(HENHMETAFILE hemf)
1985 if(!
bitmap || !graphics || !cachedbmp)
2005 ULONG andstride, xorstride, bitssize;
2006 LPBYTE andbits, xorbits, androw, xorrow, srcrow;
2018 andstride = ((lockeddata.
Width+31)/32)*4;
2019 xorstride = lockeddata.
Width*4;
2020 bitssize = (andstride + xorstride) * lockeddata.
Height;
2022 andbits = heap_alloc_zero(bitssize);
2026 xorbits = andbits + andstride * lockeddata.
Height;
2032 androw = andbits + andstride *
y;
2034 if (srcrow[3+4*
x] >= 128)
2035 androw[
x/8] |= 1 << (7-
x%8);
2037 xorrow = xorbits + xorstride *
y;
2038 memcpy(xorrow, srcrow, xorstride);
2057 TRACE(
"%p\n", cachedbmp);
2071 TRACE(
"%p %p %d %d\n", graphics, cachedbmp,
x,
y);
2073 if(!graphics || !cachedbmp)
2091 if (clobber_palette)
2094 dst->image.palette =
src->image.palette;
2099 dst->image.xres =
src->image.xres;
2100 dst->image.yres =
src->image.yres;
2102 dst->height =
src->height;
2103 dst->format =
src->format;
2104 dst->hbitmap =
src->hbitmap;
2107 dst->stride =
src->stride;
2108 dst->own_bits =
src->own_bits;
2109 if (
dst->metadata_reader)
2110 IWICMetadataReader_Release(
dst->metadata_reader);
2111 dst->metadata_reader =
src->metadata_reader;
2113 dst->prop_item =
src->prop_item;
2114 dst->prop_count =
src->prop_count;
2115 if (
dst->image.decoder)
2116 IWICBitmapDecoder_Release(
dst->image.decoder);
2117 dst->image.decoder =
src->image.decoder;
2118 dst->image.frame_count =
src->image.frame_count;
2119 dst->image.current_frame =
src->image.current_frame;
2120 dst->image.format =
src->image.format;
2122 src->image.type = ~0;
2138 IWICMetadataReader_Release(((
GpBitmap*)
image)->metadata_reader);
2149 IWICBitmapDecoder_Release(
image->decoder);
2179 FIXME(
"not implemented\n");
2191 FIXME(
"not implemented\n");
2199 TRACE(
"%p %p %p\n",
image, srcRect, srcUnit);
2201 if(!
image || !srcRect || !srcUnit)
2208 srcRect->
X = srcRect->
Y = 0.0;
2214 WARN(
"GpImage with no image data\n");
2218 TRACE(
"returning (%f, %f) (%f, %f) unit type %d\n", srcRect->
X, srcRect->
Y,
2241 WARN(
"GpImage with no image data\n");
2257 if(!
image || !graphics)
2274 (*graphics)->image =
image;
2275 (*graphics)->xres =
image->xres;
2276 (*graphics)->yres =
image->yres;
2300 WARN(
"GpImage with no image data\n");
2328 if (!
image->palette ||
image->palette->Count == 0)
2403 WARN(
"GpImage with no image data\n");
2440 UINT prop_count,
i, items_returned;
2448 FIXME(
"Not implemented for type %d\n",
image->type);
2456 for (
i = 0;
i <
num;
i++)
2471 hr = IWICMetadataReader_GetCount(
reader, &prop_count);
2476 hr = IWICMetadataReader_GetEnumerator(
reader, &enumerator);
2479 IWICEnumMetadataItem_Reset(enumerator);
2481 for (
i = 0;
i <
num;
i++)
2485 hr = IWICEnumMetadataItem_Next(enumerator, 1,
NULL, &
id,
NULL, &items_returned);
2490 FIXME(
"not supported propvariant type for id: %u\n",
id.
vt);
2494 list[
i] =
id.u.uiVal;
2497 IWICEnumMetadataItem_Release(enumerator);
2511 return value->u.caub.cElems;
2515 return value->u.caui.cElems * 2;
2520 return value->u.caul.cElems * 4;
2525 return value->u.cauh.cElems * 8;
2529 return value->u.blob.cbSize;
2531 FIXME(
"not supported variant type %d\n",
value->vt);
2548 FIXME(
"Not implemented for type %d\n",
image->type);
2572 id.u.uiVal = propid;
2583#ifndef PropertyTagTypeSByte
2584#define PropertyTagTypeSByte 6
2585#define PropertyTagTypeSShort 8
2586#define PropertyTagTypeFloat 11
2587#define PropertyTagTypeDouble 12
2613 if (vt2type[
i].
vt ==
vt)
return vt2type[
i].type;
2615 FIXME(
"not supported variant type %u\n",
vt);
2622 UINT item_size, item_type;
2671 FIXME(
"not supported variant type %d\n",
value->vt);
2675 item->length = item_size;
2676 item->type = item_type;
2696 FIXME(
"Not implemented for type %d\n",
image->type);
2725 id.u.uiVal = propid;
2740 UINT prop_count, prop_size,
i;
2749 FIXME(
"Not implemented for type %d\n",
image->type);
2769 hr = IWICMetadataReader_GetCount(
reader, &prop_count);
2772 hr = IWICMetadataReader_GetEnumerator(
reader, &enumerator);
2775 IWICEnumMetadataItem_Reset(enumerator);
2779 PropVariantInit(&
id);
2780 PropVariantInit(&
value);
2782 for (
i = 0;
i < prop_count;
i++)
2784 UINT items_returned, item_size;
2786 hr = IWICEnumMetadataItem_Next(enumerator, 1,
NULL, &
id, &
value, &items_returned);
2790 if (item_size) prop_size +=
sizeof(
PropertyItem) + item_size;
2796 IWICEnumMetadataItem_Release(enumerator);
2800 *
count = prop_count;
2812 UINT prop_count, prop_size,
i;
2822 FIXME(
"Not implemented for type %d\n",
image->type);
2835 item_value = (
char *)(
buf + prop_count);
2837 for (
i = 0;
i < prop_count;
i++)
2839 buf[
i].value = item_value;
2840 item_value +=
buf[
i].length;
2849 hr = IWICMetadataReader_GetEnumerator(
reader, &enumerator);
2852 IWICEnumMetadataItem_Reset(enumerator);
2854 item_value = (
char *)(
buf + prop_count);
2856 PropVariantInit(&
id);
2857 PropVariantInit(&
value);
2859 for (
i = 0;
i < prop_count;
i++)
2862 UINT items_returned, item_size;
2864 hr = IWICEnumMetadataItem_Next(enumerator, 1,
NULL, &
id, &
value, &items_returned);
2869 FIXME(
"not supported propvariant type for id: %u\n",
id.
vt);
2881 buf[
i].length = item_size;
2882 buf[
i].value = item_value;
2884 item_value += item_size;
2893 IWICEnumMetadataItem_Release(enumerator);
2908 {&ImageFormatGIF, &FrameDimensionTime},
2909 {&ImageFormatIcon, &FrameDimensionResolution},
2969 result = &FrameDimensionPage;
3011 UINT prop_size, prop_count;
3016 prop_size = prop_count = 0;
3018 if (!prop_item)
return;
3027 prop_item = heap_alloc_zero(prop_size +
item->length +
sizeof(
PropertyItem));
3028 if (!prop_item)
return;
3031 memcpy(prop_item + prop_count + 1,
bitmap->prop_item + prop_count, prop_size);
3033 item_value = (
char *)(prop_item + prop_count + 1);
3035 for (
i = 0;
i < prop_count;
i++)
3037 prop_item[
i].
value = item_value;
3038 item_value += prop_item[
i].
length;
3042 prop_item[prop_count].
id =
item->id;
3043 prop_item[prop_count].
type =
item->type;
3045 prop_item[prop_count].
value = (
char *)(prop_item + prop_count + 1) + prop_size;
3049 bitmap->prop_item = prop_item;
3063 PropVariantInit(&
id);
3064 PropVariantInit(&
value);
3068 if (!
id.
u.pwszVal)
return FALSE;
3090 PropVariantInit(&
id);
3091 PropVariantInit(&
value);
3095 if (!
id.
u.pwszVal)
return NULL;
3103 item_size +=
sizeof(*item);
3104 item = heap_alloc_zero(item_size);
3121 static const WCHAR textentryW[] = {
'T',
'e',
'x',
't',
'E',
'n',
't',
'r',
'y',0 };
3133 static const WCHAR applicationW[] = {
'A',
'p',
'p',
'l',
'i',
'c',
'a',
't',
'i',
'o',
'n',0 };
3134 static const WCHAR dataW[] = {
'D',
'a',
't',
'a',0 };
3151 loop = heap_alloc_zero(
sizeof(*loop) +
sizeof(
SHORT));
3156 loop->length =
sizeof(
SHORT);
3157 loop->
value = loop + 1;
3174 static const WCHAR backgroundW[] = {
'B',
'a',
'c',
'k',
'g',
'r',
'o',
'u',
'n',
'd',
'C',
'o',
'l',
'o',
'r',
'I',
'n',
'd',
'e',
'x',0 };
3186 static const WCHAR global_flagW[] = {
'G',
'l',
'o',
'b',
'a',
'l',
'C',
'o',
'l',
'o',
'r',
'T',
'a',
'b',
'l',
'e',
'F',
'l',
'a',
'g',0 };
3209 IWICImagingFactory_Release(
factory);
3217 pal = heap_alloc_zero(
sizeof(*pal) +
count * 3);
3218 if (!pal)
return NULL;
3221 pal->
value = pal + 1;
3228 rgb[
i*3] = (colors[
i] >> 16) & 0xff;
3229 rgb[
i*3 + 1] = (colors[
i] >> 8) & 0xff;
3230 rgb[
i*3 + 2] = colors[
i] & 0xff;
3241 static const WCHAR transparency_flagW[] = {
'T',
'r',
'a',
'n',
's',
'p',
'a',
'r',
'e',
'n',
'c',
'y',
'F',
'l',
'a',
'g',0 };
3242 static const WCHAR colorW[] = {
'T',
'r',
'a',
'n',
's',
'p',
'a',
'r',
'e',
'n',
't',
'C',
'o',
'l',
'o',
'r',
'I',
'n',
'd',
'e',
'x',0 };
3259 UINT block_count,
i;
3263 hr = IWICBitmapFrameDecode_QueryInterface(frame, &IID_IWICMetadataBlockReader, (
void **)&block_reader);
3266 hr = IWICMetadataBlockReader_GetCount(block_reader, &block_count);
3269 for (
i = 0;
i < block_count;
i++)
3271 hr = IWICMetadataBlockReader_GetReaderByIndex(block_reader,
i, &
reader);
3284 IWICMetadataReader_Release(
reader);
3288 IWICMetadataBlockReader_Release(block_reader);
3296 static const WCHAR delayW[] = {
'D',
'e',
'l',
'a',
'y',0 };
3301 UINT frame_count, block_count,
i;
3305 IWICBitmapDecoder_GetFrameCount(
decoder, &frame_count);
3306 if (frame_count > 1)
3308 delay = heap_alloc_zero(
sizeof(*delay) + frame_count *
sizeof(
LONG));
3316 delay->
value = delay + 1;
3320 for (
i = 0;
i < frame_count;
i++)
3322 hr = IWICBitmapDecoder_GetFrame(
decoder,
i, &frame);
3326 IWICBitmapFrameDecode_Release(frame);
3333 hr = IWICBitmapDecoder_QueryInterface(
decoder, &IID_IWICMetadataBlockReader, (
void **)&block_reader);
3336 hr = IWICMetadataBlockReader_GetCount(block_reader, &block_count);
3339 for (
i = 0;
i < block_count;
i++)
3341 hr = IWICMetadataBlockReader_GetReaderByIndex(block_reader,
i, &
reader);
3347 if (frame_count > 1 && !loop)
3356 IWICMetadataReader_Release(
reader);
3360 IWICMetadataBlockReader_Release(block_reader);
3363 if (frame_count > 1 && !loop)
3365 loop = heap_alloc_zero(
sizeof(*loop) +
sizeof(
SHORT));
3370 loop->length =
sizeof(
SHORT);
3371 loop->
value = loop + 1;
3372 *(
SHORT *)loop->value = 1;
3389 hr = IWICBitmapDecoder_GetFrame(
decoder, 0, &frame);
3392 hr = IWICBitmapFrameDecode_QueryInterface(frame, &IID_IWICMetadataBlockReader, (
void **)&block_reader);
3395 hr = IWICMetadataBlockReader_GetCount(block_reader, &block_count);
3398 for (
i = 0;
i < block_count;
i++)
3400 hr = IWICMetadataBlockReader_GetReaderByIndex(block_reader,
i, &
reader);
3403 if (!transparent_idx)
3406 IWICMetadataReader_Release(
reader);
3410 IWICMetadataBlockReader_Release(block_reader);
3416 IWICBitmapFrameDecode_Release(frame);
3426 item_size +=
sizeof(*item);
3427 item = heap_alloc_zero(item_size);
3453 ERR(
"unhandled case %u\n",
value.vt);
3468 struct keyword_info {
3483 hr = IWICBitmapDecoder_GetFrame(
decoder, active_frame, &frame);
3486 hr = IWICBitmapFrameDecode_QueryInterface(frame, &IID_IWICMetadataBlockReader, (
void **)&block_reader);
3489 hr = IWICMetadataBlockReader_GetCount(block_reader, &block_count);
3492 for (
i = 0;
i < block_count;
i++)
3494 hr = IWICMetadataBlockReader_GetReaderByIndex(block_reader,
i, &
reader);
3542 rational[0] = 100000;
3554 if (!seen_whitepoint)
3565 rational[1] = 100000;
3567 rational[3] = 100000;
3569 seen_whitepoint =
TRUE;
3584 rational[1] = 100000;
3586 rational[3] = 100000;
3588 rational[5] = 100000;
3590 rational[7] = 100000;
3592 rational[9] = 100000;
3594 rational[11] = 100000;
3602 IWICMetadataReader_Release(
reader);
3606 IWICMetadataBlockReader_Release(block_reader);
3609 IWICBitmapFrameDecode_Release(frame);
3622 IWICImagingFactory_Release(
factory);
3652 IWICBitmapDecoder_GetFrameCount(
decoder, &frame_count);
3653 hr = IWICBitmapDecoder_GetFrame(
decoder, active_frame, &frame);
3656 hr = IWICBitmapFrameDecode_GetPixelFormat(frame, &
wic_format);
3660 if (!force_conversion)
3667 IWICBitmapSource_AddRef(
source);
3722 hr = IWICBitmapSource_GetResolution(
source, &dpix, &dpiy);
3725 bitmap->image.xres = dpix;
3726 bitmap->image.yres = dpiy;
3732 IWICBitmapSource_Release(
source);
3738 if (metadata_reader)
3740 else if (IWICBitmapFrameDecode_QueryInterface(frame, &IID_IWICMetadataBlockReader, (
void **)&block_reader) ==
S_OK)
3742 UINT block_count = 0;
3743 if (IWICMetadataBlockReader_GetCount(block_reader, &block_count) ==
S_OK && block_count)
3744 IWICMetadataBlockReader_GetReaderByIndex(block_reader, 0, &
bitmap->metadata_reader);
3745 IWICMetadataBlockReader_Release(block_reader);
3749 IWICBitmapFrameDecode_Release(frame);
3766 bitmap->image.frame_count = frame_count;
3767 bitmap->image.current_frame = active_frame;
3769 IWICBitmapDecoder_AddRef(
decoder);
3778 bitmap->image.palette->Flags = 0;
3797 IWICBitmapDecoder_Release(
decoder);
3817 new_image->
type = ~0;
3825 static const WCHAR leftW[] = {
'L',
'e',
'f',
't',0};
3826 static const WCHAR topW[] = {
'T',
'o',
'p',0};
3831 return IWICBitmapFrameDecode_GetSize(frame,
width,
height);
3854 IWICBitmapSource_Release(
source);
3865 if(first_frame || *
src>>24 != 0)
3875 BYTE bgcolor_idx = 0;
3887 BYTE transparent_idx;
3888 transparent_idx = *(
BYTE*)
bitmap->prop_item[
i].value;
3890 if(transparent_idx == bgcolor_idx)
3897 if(
bitmap->prop_item[
i].length/3 > bgcolor_idx) {
3905 FIXME(
"can't get gif background color\n");
3911 static const WCHAR disposalW[] = {
'D',
'i',
's',
'p',
'o',
's',
'a',
'l',0};
3915 int cur_frame=0, disposal;
3920 if(active_frame >
image->current_frame) {
3921 hr = IWICBitmapDecoder_GetFrame(
bitmap->image.decoder,
image->current_frame, &frame);
3925 IWICBitmapFrameDecode_Release(frame);
3928 cur_frame =
image->current_frame;
3930 cur_frame =
image->current_frame+1;
3933 while(cur_frame != active_frame) {
3934 hr = IWICBitmapDecoder_GetFrame(
bitmap->image.decoder, cur_frame, &frame);
3961 IWICBitmapFrameDecode_Release(frame);
3965 hr = IWICBitmapDecoder_GetFrame(
bitmap->image.decoder, active_frame, &frame);
3970 IWICBitmapFrameDecode_Release(frame);
3974 image->current_frame = active_frame;
4017 ULONG bytesread, chunk_size;
4019 hr = IStream_Seek(pIStream,
seek, STREAM_SEEK_SET, &chunk_start);
4022 hr = IStream_Read(pIStream,
header, 8, &bytesread);
4023 if (
FAILED(
hr) || bytesread < 8)
break;
4032 seek.QuadPart = chunk_start.
QuadPart + chunk_size + 12;
4035 TRACE(
"has_tRNS = %d\n", has_tRNS);
4052 hr = IWICBitmapDecoder_GetFrame(
decoder, 0, &frame);
4055 hr = IWICBitmapFrameDecode_GetPixelFormat(frame, &
format);
4059 force_conversion =
TRUE;
4066 force_conversion =
TRUE;
4073 IWICBitmapFrameDecode_Release(frame);
4078 IWICBitmapDecoder_Release(
decoder);
4093 hr = IWICBitmapDecoder_GetFrameCount(
decoder, &frame_count);
4098 IWICBitmapDecoder_Release(
decoder);
4102 if(frame_count > 1) {
4104 (*image)->palette =
NULL;
4144 is_placeable =
TRUE;
4147 seek.QuadPart = is_placeable ?
sizeof(pfh) : 0;
4185 TRACE(
"Could not load metafile\n");
4247 TRACE(
"Could not load metafile\n");
4308 bytesread >=
codecs[
i].info.SigSize)
4310 for (sig=0; sig<
codecs[
i].info.SigCount; sig++)
4326 TRACE(
"no match for %i byte signature %x %x %x %x %x %x %x %x\n", bytesread,
4359 if (!
image || !dimensionID)
4364 if (frame >=
image->frame_count)
4366 WARN(
"requested frame %u, but image has only %u\n", frame,
image->frame_count);
4373 WARN(
"invalid image type %d\n",
image->type);
4378 if (
image->current_frame == frame)
4384 if (!
image->decoder)
4386 TRACE(
"image doesn't have an associated decoder\n");
4395 WARN(
"can't find decoder info\n");
4457 FIXME(
"not implemented\n");
4468 TRACE(
"(%p,%p:%#x,%u,%u,%p)\n",
image,
item,
item->id,
item->type,
item->length,
item->value);
4471 FIXME(
"not implemented\n");
4538 IWICImagingFactory_Release(
factory);
4546 hr = IWICBitmapEncoder_CreateNewFrame(
encoder, &frameencode, &encoderoptions);
4551 hr = IWICBitmapFrameEncode_Initialize(frameencode, encoderoptions);
4554 hr = IWICBitmapFrameEncode_SetSize(frameencode,
width,
height);
4557 hr = IWICBitmapFrameEncode_SetResolution(frameencode,
image->xres,
image->yres);
4566 gdipformat =
bitmap->format;
4572 desired_wicformat = &GUID_WICPixelFormat32bppBGRA;
4576 memcpy(&wicformat, desired_wicformat,
sizeof(
GUID));
4577 hr = IWICBitmapFrameEncode_SetPixelFormat(frameencode, &wicformat);
4613 hr = IWICBitmapFrameEncode_WritePixels(frameencode, 1, row_size, row_size,
row);
4625 hr = IWICBitmapFrameEncode_Commit(frameencode);
4627 IWICBitmapFrameEncode_Release(frameencode);
4628 IPropertyBag2_Release(encoderoptions);
4634 IWICBitmapEncoder_Release(
encoder);
4684 encode_image =
NULL;
4688 encode_image =
codecs[
i].encode_func;
4690 if (encode_image ==
NULL)
4723 TRACE(
"<-- InsufficientBuffer\n");
4754 new_palette = heap_alloc_zero(2 *
sizeof(
UINT) +
palette->Count *
sizeof(
ARGB));
4758 image->palette = new_palette;
4772static const WCHAR bmp_codecname[] = {
'B',
'u',
'i',
'l',
't',
'-',
'i',
'n',
' ',
'B',
'M',
'P', 0};
4773static const WCHAR bmp_extension[] = {
'*',
'.',
'B',
'M',
'P',
';',
'*',
'.',
'D',
'I',
'B',
';',
'*',
'.',
'R',
'L',
'E',0};
4779static const WCHAR jpeg_codecname[] = {
'B',
'u',
'i',
'l',
't',
'-',
'i',
'n',
' ',
'J',
'P',
'E',
'G', 0};
4780static const WCHAR jpeg_extension[] = {
'*',
'.',
'J',
'P',
'G',
';',
'*',
'.',
'J',
'P',
'E',
'G',
';',
'*',
'.',
'J',
'P',
'E',
';',
'*',
'.',
'J',
'F',
'I',
'F',0};
4781static const WCHAR jpeg_mimetype[] = {
'i',
'm',
'a',
'g',
'e',
'/',
'j',
'p',
'e',
'g', 0};
4786static const WCHAR gif_codecname[] = {
'B',
'u',
'i',
'l',
't',
'-',
'i',
'n',
' ',
'G',
'I',
'F', 0};
4791static const BYTE gif_sig_mask[] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
4793static const WCHAR tiff_codecname[] = {
'B',
'u',
'i',
'l',
't',
'-',
'i',
'n',
' ',
'T',
'I',
'F',
'F', 0};
4794static const WCHAR tiff_extension[] = {
'*',
'.',
'T',
'I',
'F',
'F',
';',
'*',
'.',
'T',
'I',
'F',0};
4795static const WCHAR tiff_mimetype[] = {
'i',
'm',
'a',
'g',
'e',
'/',
't',
'i',
'f',
'f', 0};
4800static const WCHAR emf_codecname[] = {
'B',
'u',
'i',
'l',
't',
'-',
'i',
'n',
' ',
'E',
'M',
'F', 0};
4802static const WCHAR emf_mimetype[] = {
'i',
'm',
'a',
'g',
'e',
'/',
'x',
'-',
'e',
'm',
'f', 0};
4807static const WCHAR wmf_codecname[] = {
'B',
'u',
'i',
'l',
't',
'-',
'i',
'n',
' ',
'W',
'M',
'F', 0};
4809static const WCHAR wmf_mimetype[] = {
'i',
'm',
'a',
'g',
'e',
'/',
'x',
'-',
'w',
'm',
'f', 0};
4814static const WCHAR png_codecname[] = {
'B',
'u',
'i',
'l',
't',
'-',
'i',
'n',
' ',
'P',
'N',
'G', 0};
4821static const WCHAR ico_codecname[] = {
'B',
'u',
'i',
'l',
't',
'-',
'i',
'n',
' ',
'I',
'C',
'O', 0};
4823static const WCHAR ico_mimetype[] = {
'i',
'm',
'a',
'g',
'e',
'/',
'x',
'-',
'i',
'c',
'o',
'n', 0};
4831 { 0x557cf400, 0x1a04, 0x11d3, { 0x9a, 0x73, 0x0, 0x0, 0xf8, 0x1e, 0xf3, 0x2e } },
4832 { 0xb96b3cabU, 0x0728U, 0x11d3U, {0x9d, 0x7b, 0x00, 0x00, 0xf8, 0x1e, 0xf3, 0x2e} },
4851 { 0x557cf401, 0x1a04, 0x11d3, { 0x9a, 0x73, 0x0, 0x0, 0xf8, 0x1e, 0xf3, 0x2e } },
4852 { 0xb96b3caeU, 0x0728U, 0x11d3U, {0x9d, 0x7b, 0x00, 0x00, 0xf8, 0x1e, 0xf3, 0x2e} },
4871 { 0x557cf402, 0x1a04, 0x11d3, { 0x9a, 0x73, 0x0, 0x0, 0xf8, 0x1e, 0xf3, 0x2e } },
4872 { 0xb96b3cb0U, 0x0728U, 0x11d3U, {0x9d, 0x7b, 0x00, 0x00, 0xf8, 0x1e, 0xf3, 0x2e} },
4891 { 0x557cf405, 0x1a04, 0x11d3, { 0x9a, 0x73, 0x0, 0x0, 0xf8, 0x1e, 0xf3, 0x2e } },
4892 { 0xb96b3cb1U, 0x0728U, 0x11d3U, {0x9d, 0x7b, 0x00, 0x00, 0xf8, 0x1e, 0xf3, 0x2e} },
4911 { 0x557cf403, 0x1a04, 0x11d3, { 0x9a, 0x73, 0x0, 0x0, 0xf8, 0x1e, 0xf3, 0x2e } },
4912 { 0xb96b3cacU, 0x0728U, 0x11d3U, {0x9d, 0x7b, 0x00, 0x00, 0xf8, 0x1e, 0xf3, 0x2e} },
4931 { 0x557cf404, 0x1a04, 0x11d3, { 0x9a, 0x73, 0x0, 0x0, 0xf8, 0x1e, 0xf3, 0x2e } },
4932 { 0xb96b3cadU, 0x0728U, 0x11d3U, {0x9d, 0x7b, 0x00, 0x00, 0xf8, 0x1e, 0xf3, 0x2e} },
4951 { 0x557cf406, 0x1a04, 0x11d3, { 0x9a, 0x73, 0x0, 0x0, 0xf8, 0x1e, 0xf3, 0x2e } },
4952 { 0xb96b3cafU, 0x0728U, 0x11d3U, {0x9d, 0x7b, 0x00, 0x00, 0xf8, 0x1e, 0xf3, 0x2e} },
4971 { 0x557cf407, 0x1a04, 0x11d3, { 0x9a, 0x73, 0x0, 0x0, 0xf8, 0x1e, 0xf3, 0x2e } },
4973 { 0xb96b3cb5U, 0x0728U, 0x11d3U, {0x9d, 0x7b, 0x00, 0x00, 0xf8, 0x1e, 0xf3, 0x2e} },
4975 { 0xb96b3cabU, 0x0728U, 0x11d3U, {0x9d, 0x7b, 0x00, 0x00, 0xf8, 0x1e, 0xf3, 0x2e} },
5000 int decoder_count=0;
5004 if (!numDecoders || !
size)
5013 *numDecoders = decoder_count;
5024 int i, decoder_count=0;
5025 TRACE(
"%u %u %p\n", numDecoders,
size, decoders);
5051 int encoder_count=0;
5055 if (!numEncoders || !
size)
5064 *numEncoders = encoder_count;
5075 int i, encoder_count=0;
5076 TRACE(
"%u %u %p\n", numEncoders,
size, encoders);
5105 FIXME(
"not implemented\n");
5120 memset(&bmh, 0,
sizeof(bmh));
5172 switch(bm.bmBitsPixel) {
5197 FIXME(
"don't know how to handle %d bpp\n", bm.bmBitsPixel);
5236 int i, num_palette_entries;
5239 if (!num_palette_entries)
5249 palette->Count = num_palette_entries;
5251 for (
i=0;
i<num_palette_entries;
i++)
5293 FIXME(
"(%p): stub\n", effect);
5310 FIXME(
"not implemented\n");
5337 FIXME(
"TestControlForceBilinear not handled\n");
5341 FIXME(
"TestControlNoICM not handled\n");
5367 UINT srcwidth, srcheight;
5369 TRACE(
"(%p %u %u %p %p %p)\n",
5372 if (!
image || !ret_image)
5414 int bpp, bytesperpixel;
5415 BOOL rotate_90, flip_x, flip_y;
5416 int src_x_offset, src_y_offset;
5431 flip_x = (
type&6) == 2 || (
type&6) == 4;
5432 flip_y = (
type&3) == 1 || (
type&3) == 2;
5436 FIXME(
"Not implemented for type %i\n",
image->type);
5446 FIXME(
"Not implemented for %i bit images\n",
bpp);
5462 bytesperpixel =
bpp/8;
5480 LPBYTE src_row, src_pixel;
5481 LPBYTE dst_row, dst_pixel;
5483 src_origin = src_lock.
Scan0;
5484 if (flip_x) src_origin += bytesperpixel * (
bitmap->
width - 1);
5489 if (flip_y) src_x_offset = -src_lock.
Stride;
5490 else src_x_offset = src_lock.
Stride;
5491 if (flip_x) src_y_offset = -bytesperpixel;
5492 else src_y_offset = bytesperpixel;
5496 if (flip_x) src_x_offset = -bytesperpixel;
5497 else src_x_offset = bytesperpixel;
5498 if (flip_y) src_y_offset = -src_lock.
Stride;
5499 else src_y_offset = src_lock.
Stride;
5502 src_row = src_origin;
5503 dst_row = dst_lock.
Scan0;
5506 src_pixel = src_row;
5507 dst_pixel = dst_row;
5511 memcpy(dst_pixel, src_pixel, bytesperpixel);
5512 dst_pixel += bytesperpixel;
5513 src_pixel += src_x_offset;
5515 src_row += src_y_offset;
5516 dst_row += dst_lock.
Stride;
5545 FIXME(
"Abort callback is not supported.\n");
5556 FIXME(
"(%p, 0x%08x, %d, %d, %p, %f): stub\n",
bitmap,
format, dithertype, palettetype,
palette, alphathreshold);
5562 ch0[
color >> 24 ]++;
5563 ch1[(
color >> 16) & 0xff]++;
5564 ch2[(
color >> 8) & 0xff]++;
5565 ch3[
color & 0xff]++;
5573 ch1[(((
color >> 16) & 0xff) *
alpha) / 0xff]++;
5574 ch2[(((
color >> 8) & 0xff) *
alpha) / 0xff]++;
5580 ch0[(
color >> 16) & 0xff]++;
5581 ch1[(
color >> 8) & 0xff]++;
5582 ch2[
color & 0xff]++;
5587 ch0[(76 * ((
color >> 16) & 0xff) + 150 * ((
color >> 8) & 0xff) + 29 * (
color & 0xff)) / 0xff]++;
5592 ch0[
color & 0xff]++;
5597 ch0[(
color >> 8) & 0xff]++;
5602 ch0[(
color >> 16) & 0xff]++;
5607 ch0[(
color >> 24) & 0xff]++;
5629 TRACE(
"(%p, %d, %u, %p, %p, %p, %p)\n",
bitmap,
format, num_of_entries,
5630 ch0, ch1, ch2, ch3);
5632 if (!
bitmap || num_of_entries != 256)
5640 if (!ch0 || !ch1 || !ch2 || !ch3)
5642 memset(ch0, 0, num_of_entries *
sizeof(
UINT));
5643 memset(ch1, 0, num_of_entries *
sizeof(
UINT));
5644 memset(ch2, 0, num_of_entries *
sizeof(
UINT));
5645 memset(ch3, 0, num_of_entries *
sizeof(
UINT));
5648 if (!ch0 || !ch1 || !ch2 || ch3)
5650 memset(ch0, 0, num_of_entries *
sizeof(
UINT));
5651 memset(ch1, 0, num_of_entries *
sizeof(
UINT));
5652 memset(ch2, 0, num_of_entries *
sizeof(
UINT));
5659 if (!ch0 || ch1 || ch2 || ch3)
5661 memset(ch0, 0, num_of_entries *
sizeof(
UINT));
5664 WARN(
"Invalid histogram format requested, %d\n",
format);
5677 set_histogram_point[
format](
color, ch0, ch1, ch2, ch3);
5690 if (!num_of_entries)
5693 *num_of_entries = 256;
5719 hr = IWICImagingFactory_CreatePalette(
factory, &wic_palette);
5725 hr = IWICImagingFactory_CreateBitmapFromMemory(
factory,
data.Width,
data.Height,
5733 IWICPalette_GetColorCount(wic_palette, &
palette->Count);
5737 IWICBitmap_Release(
bitmap);
5740 IWICPalette_Release(wic_palette);
5743 IWICImagingFactory_Release(
factory);
5798 FIXME(
"unknown palette type %d\n",
type);
unsigned long long UINT64
int strcmp(const char *String1, const char *String2)
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
ACPI_SIZE strlen(const char *String)
static void * heap_alloc(size_t len)
static BOOL heap_free(void *mem)
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
static void list_init(struct list_entry *head)
GpStatus WINGDIPAPI GdipGetDpiX(GpGraphics *graphics, REAL *dpi)
GpStatus WINGDIPAPI GdipCreateFromHDC(HDC hdc, GpGraphics **graphics)
GpStatus WINGDIPAPI GdipCreateStreamOnFile(GDIPCONST WCHAR *filename, UINT access, IStream **stream)
GpStatus WINGDIPAPI GdipGetDpiY(GpGraphics *graphics, REAL *dpi)
GpStatus WINGDIPAPI GdipDeleteGraphics(GpGraphics *graphics)
GpStatus WINGDIPAPI GdipDrawImageRectRectI(GpGraphics *graphics, GpImage *image, INT dstx, INT dsty, INT dstwidth, INT dstheight, INT srcx, INT srcy, INT srcwidth, INT srcheight, GpUnit srcUnit, GDIPCONST GpImageAttributes *imageAttributes, DrawImageAbort callback, VOID *callbackData)
GpStatus WINGDIPAPI GdipDrawImage(GpGraphics *graphics, GpImage *image, REAL x, REAL y)
static const WCHAR emf_codecname[]
static GpStatus load_wmf(IStream *stream, GpMetafile **metafile)
GpStatus WINGDIPAPI GdipCreateBitmapFromFile(GDIPCONST WCHAR *filename, GpBitmap **bitmap)
static PropertyItem * create_prop(PROPID propid, PROPVARIANT *value)
static PropertyItem * get_gif_comment(IWICMetadataReader *reader)
static const BYTE bmp_sig_mask[]
GpStatus WINGDIPAPI GdipGetPropertySize(GpImage *image, UINT *size, UINT *count)
static void setpixel_16bppARGB1555(BYTE r, BYTE g, BYTE b, BYTE a, BYTE *row, UINT x)
static const BYTE wmf_sig_pattern[]
GpStatus encode_image_png(GpImage *image, IStream *stream, GDIPCONST EncoderParameters *params)
static const BYTE tiff_sig_mask[]
GpStatus WINGDIPAPI GdipDeleteEffect(CGpEffect *effect)
GpStatus WINGDIPAPI GdipGetImageVerticalResolution(GpImage *image, REAL *res)
static GpStatus decode_image_wmf(IStream *stream, GpImage **image)
static void setpixel_48bppRGB(BYTE r, BYTE g, BYTE b, BYTE a, BYTE *row, UINT x)
GpStatus WINGDIPAPI GdipGetImageRawFormat(GpImage *image, GUID *format)
GpStatus WINGDIPAPI GdipGetImagePalette(GpImage *image, ColorPalette *palette, INT size)
GpStatus WINGDIPAPI GdipGetImageEncodersSize(UINT *numEncoders, UINT *size)
static void setpixel_32bppPARGB(BYTE r, BYTE g, BYTE b, BYTE a, BYTE *row, UINT x)
static const WCHAR tiff_format[]
GpStatus WINGDIPAPI GdipGetImageFlags(GpImage *image, UINT *flags)
GpStatus WINGDIPAPI GdipBitmapConvertFormat(GpBitmap *bitmap, PixelFormat format, DitherType dithertype, PaletteType palettetype, ColorPalette *palette, REAL alphathreshold)
GpStatus WINGDIPAPI GdipSaveImageToStream(GpImage *image, IStream *stream, GDIPCONST CLSID *clsid, GDIPCONST EncoderParameters *params)
#define PIXELFORMATBPP(x)
static GpStatus decode_image_icon(IStream *stream, GpImage **image)
static void set_histogram_point_g(ARGB color, UINT *ch0, UINT *ch1, UINT *ch2, UINT *ch3)
static DWORD blend_argb_no_bkgnd_alpha(DWORD src, DWORD bkgnd)
GpStatus WINGDIPAPI GdipBitmapGetHistogramSize(HistogramFormat format, UINT *num_of_entries)
GpStatus WINGDIPAPI GdipCloneBitmapAreaI(INT x, INT y, INT width, INT height, PixelFormat format, GpBitmap *srcBitmap, GpBitmap **dstBitmap)
GpStatus WINGDIPAPI GdipGetAllPropertyItems(GpImage *image, UINT size, UINT count, PropertyItem *buf)
static const WCHAR bmp_extension[]
GpStatus WINGDIPAPI GdipGetImageWidth(GpImage *image, UINT *width)
static const WCHAR wmf_mimetype[]
static const struct @439 pixel_formats[]
GpStatus WINGDIPAPI GdipGetImageItemData(GpImage *image, ImageItemData *item)
static void set_histogram_point_rgb(ARGB color, UINT *ch0, UINT *ch1, UINT *ch2, UINT *ch3)
static void set_histogram_point_argb(ARGB color, UINT *ch0, UINT *ch1, UINT *ch2, UINT *ch3)
static GpStatus decode_image_jpeg(IStream *stream, GpImage **image)
static GpStatus decode_image_png(IStream *stream, GpImage **image)
GpStatus WINGDIPAPI GdipGetImageHeight(GpImage *image, UINT *height)
GpStatus WINGDIPAPI GdipGetImageDimension(GpImage *image, REAL *width, REAL *height)
GpStatus(* decode_image_func)(IStream *stream, GpImage **image)
GpStatus WINGDIPAPI GdipCreateBitmapFromScan0(INT width, INT height, INT stride, PixelFormat format, BYTE *scan0, GpBitmap **bitmap)
static void getpixel_16bppARGB1555(BYTE *r, BYTE *g, BYTE *b, BYTE *a, const BYTE *row, UINT x)
GpStatus WINGDIPAPI GdipGetImageDecodersSize(UINT *numDecoders, UINT *size)
static GpStatus decode_image_emf(IStream *stream, GpImage **image)
static void getpixel_64bppPARGB(BYTE *r, BYTE *g, BYTE *b, BYTE *a, const BYTE *row, UINT x)
#define PropertyTagTypeSShort
static void generate_halftone_palette(ARGB *entries, UINT count)
static void getpixel_16bppRGB565(BYTE *r, BYTE *g, BYTE *b, BYTE *a, const BYTE *row, UINT x)
static const WCHAR png_mimetype[]
static GpStatus load_emf(IStream *stream, GpMetafile **metafile)
static void getpixel_4bppIndexed(BYTE *index, const BYTE *row, UINT x)
GpStatus WINGDIPAPI GdipSetImagePalette(GpImage *image, GDIPCONST ColorPalette *palette)
static const WCHAR jpeg_mimetype[]
GpStatus WINGDIPAPI GdipCreateBitmapFromResource(HINSTANCE hInstance, GDIPCONST WCHAR *lpBitmapName, GpBitmap **bitmap)
static HRESULT get_gif_frame_rect(IWICBitmapFrameDecode *frame, UINT *left, UINT *top, UINT *width, UINT *height)
GpStatus WINGDIPAPI GdipImageGetFrameCount(GpImage *image, GDIPCONST GUID *dimensionID, UINT *count)
static void setpixel_16bppRGB555(BYTE r, BYTE g, BYTE b, BYTE a, BYTE *row, UINT x)
static const WCHAR bmp_format[]
#define PropertyTagTypeFloat
static DWORD get_gif_background_color(GpBitmap *bitmap)
static const BYTE ico_sig_pattern[]
GpStatus WINGDIPAPI GdipCreateCachedBitmap(GpBitmap *bitmap, GpGraphics *graphics, GpCachedBitmap **cachedbmp)
GpStatus WINGDIPAPI GdipSetPropertyItem(GpImage *image, GDIPCONST PropertyItem *item)
GpStatus WINGDIPAPI GdipRemovePropertyItem(GpImage *image, PROPID propId)
static void add_property(GpBitmap *bitmap, PropertyItem *item)
static void set_histogram_point_pargb(ARGB color, UINT *ch0, UINT *ch1, UINT *ch2, UINT *ch3)
GpStatus WINGDIPAPI GdipGetImageGraphicsContext(GpImage *image, GpGraphics **graphics)
static void setpixel_64bppPARGB(BYTE r, BYTE g, BYTE b, BYTE a, BYTE *row, UINT x)
static GpStatus encode_image_tiff(GpImage *image, IStream *stream, GDIPCONST EncoderParameters *params)
void(* metadata_reader_func)(GpBitmap *bitmap, IWICBitmapDecoder *decoder, UINT frame)
static void set_histogram_point_a(ARGB color, UINT *ch0, UINT *ch1, UINT *ch2, UINT *ch3)
static const WCHAR wmf_format[]
#define convert_rgb_to_indexed(getpixel_function, setpixel_function)
#define PropertyTagTypeDouble
GpStatus WINGDIPAPI GdipSaveImageToFile(GpImage *image, GDIPCONST WCHAR *filename, GDIPCONST CLSID *clsidEncoder, GDIPCONST EncoderParameters *encoderParams)
GpStatus convert_pixels(INT width, INT height, INT dst_stride, BYTE *dst_bits, PixelFormat dst_format, INT src_stride, const BYTE *src_bits, PixelFormat src_format, ColorPalette *palette)
static void setpixel_32bppRGB(BYTE r, BYTE g, BYTE b, BYTE a, BYTE *row, UINT x)
GpStatus WINGDIPAPI GdipBitmapGetHistogram(GpBitmap *bitmap, HistogramFormat format, UINT num_of_entries, UINT *ch0, UINT *ch1, UINT *ch2, UINT *ch3)
GpStatus WINGDIPAPI GdipImageGetFrameDimensionsCount(GpImage *image, UINT *count)
static GpStatus encode_image_gif(GpImage *image, IStream *stream, GDIPCONST EncoderParameters *params)
static void getpixel_1bppIndexed(BYTE *index, const BYTE *row, UINT x)
GpStatus WINGDIPAPI GdipCreateBitmapFromGraphics(INT width, INT height, GpGraphics *target, GpBitmap **bitmap)
GpStatus WINGDIPAPI GdipBitmapSetResolution(GpBitmap *bitmap, REAL xdpi, REAL ydpi)
static const WCHAR bmp_mimetype[]
GpStatus WINGDIPAPI GdipCreateBitmapFromGdiDib(GDIPCONST BITMAPINFO *info, VOID *bits, GpBitmap **bitmap)
static const WCHAR tiff_mimetype[]
static GpStatus get_decoder_info(IStream *stream, const struct image_codec **result)
static GpStatus free_image_data(GpImage *image)
static void getpixel_32bppRGB(BYTE *r, BYTE *g, BYTE *b, BYTE *a, const BYTE *row, UINT x)
static const BYTE emf_sig_pattern[]
GpStatus WINGDIPAPI GdipBitmapLockBits(GpBitmap *bitmap, GDIPCONST GpRect *rect, UINT flags, PixelFormat format, BitmapData *lockeddata)
static const BYTE jpeg_sig_mask[]
static void getpixel_8bppIndexed(BYTE *index, const BYTE *row, UINT x)
GpStatus WINGDIPAPI GdipDeleteCachedBitmap(GpCachedBitmap *cachedbmp)
GpStatus WINGDIPAPI GdipGetPropertyCount(GpImage *image, UINT *num)
GpStatus WINGDIPAPI GdipBitmapApplyEffect(GpBitmap *bitmap, CGpEffect *effect, RECT *roi, BOOL useAuxData, VOID **auxData, INT *auxDataSize)
GpStatus WINGDIPAPI GdipGetEncoderParameterListSize(GpImage *image, GDIPCONST CLSID *clsidEncoder, UINT *size)
static const BYTE png_sig_pattern[]
static const WCHAR jpeg_format[]
GpStatus WINGDIPAPI GdipDisposeImage(GpImage *image)
#define convert_indexed_to_rgb(getpixel_function, setpixel_function)
static void getpixel_64bppARGB(BYTE *r, BYTE *g, BYTE *b, BYTE *a, const BYTE *row, UINT x)
GpStatus WINGDIPAPI GdipGetImagePixelFormat(GpImage *image, PixelFormat *format)
static const WCHAR gif_format[]
static GpStatus encode_image_BMP(GpImage *image, IStream *stream, GDIPCONST EncoderParameters *params)
GpStatus WINGDIPAPI GdipLoadImageFromFile(GDIPCONST WCHAR *filename, GpImage **image)
static void getpixel_48bppRGB(BYTE *r, BYTE *g, BYTE *b, BYTE *a, const BYTE *row, UINT x)
static const BYTE gif_sig_mask[]
static GpStatus decode_image_bmp(IStream *stream, GpImage **image)
static void setpixel_16bppGrayScale(BYTE r, BYTE g, BYTE b, BYTE a, BYTE *row, UINT x)
GpStatus WINGDIPAPI GdipGetImageThumbnail(GpImage *image, UINT width, UINT height, GpImage **ret_image, GetThumbnailImageAbort cb, VOID *cb_data)
GpStatus WINGDIPAPI GdipBitmapGetPixel(GpBitmap *bitmap, INT x, INT y, ARGB *color)
static void move_bitmap(GpBitmap *dst, GpBitmap *src, BOOL clobber_palette)
static const WCHAR emf_mimetype[]
const WICPixelFormatGUID * wic_format
GpStatus(* encode_image_func)(GpImage *image, IStream *stream, GDIPCONST EncoderParameters *params)
GpStatus WINGDIPAPI GdipBitmapSetPixel(GpBitmap *bitmap, INT x, INT y, ARGB color)
#define PropertyTagTypeSByte
static GpStatus decode_image_gif(IStream *stream, GpImage **image)
GpStatus WINGDIPAPI GdipCreateHICONFromBitmap(GpBitmap *bitmap, HICON *hicon)
GpStatus WINGDIPAPI GdipSetEffectParameters(CGpEffect *effect, const VOID *params, const UINT size)
GpStatus WINGDIPAPI GdipDrawCachedBitmap(GpGraphics *graphics, GpCachedBitmap *cachedbmp, INT x, INT y)
static void getpixel_16bppGrayScale(BYTE *r, BYTE *g, BYTE *b, BYTE *a, const BYTE *row, UINT x)
static void setpixel_64bppARGB(BYTE r, BYTE g, BYTE b, BYTE a, BYTE *row, UINT x)
GpStatus WINGDIPAPI GdipImageSetAbort(GpImage *image, GdiplusAbort *pabort)
static UINT propvariant_size(PROPVARIANT *value)
static const WCHAR gif_extension[]
GpStatus(* select_image_func)(GpImage *image, UINT active_frame)
WICBitmapPaletteType palette_type
static const BYTE png_sig_mask[]
static void getpixel_24bppRGB(BYTE *r, BYTE *g, BYTE *b, BYTE *a, const BYTE *row, UINT x)
static GpStatus select_frame_gif(GpImage *image, UINT active_frame)
static PropertyItem * get_gif_transparent_idx(IWICMetadataReader *reader)
static void png_metadata_reader(GpBitmap *bitmap, IWICBitmapDecoder *decoder, UINT active_frame)
static const WCHAR ico_format[]
static PropertyItem * get_gif_background(IWICMetadataReader *reader)
static GpStatus create_optimal_palette(ColorPalette *palette, INT desired, BOOL transparent, GpBitmap *bitmap)
GpStatus WINGDIPAPI GdipGetImagePaletteSize(GpImage *image, INT *size)
static void setpixel_4bppIndexed(BYTE r, BYTE g, BYTE b, BYTE a, BYTE *row, UINT x, ColorPalette *palette)
static const WCHAR ico_extension[]
GpStatus WINGDIPAPI GdipImageSelectActiveFrame(GpImage *image, GDIPCONST GUID *dimensionID, UINT frame)
static BOOL has_png_transparency_chunk(IStream *pIStream)
GpStatus WINGDIPAPI GdipGetPropertyIdList(GpImage *image, UINT num, PROPID *list)
static const WCHAR tiff_extension[]
static GpStatus encode_image_jpeg(GpImage *image, IStream *stream, GDIPCONST EncoderParameters *params)
#define convert_rgb_to_rgb(getpixel_function, setpixel_function)
static PixelFormat get_16bpp_format(HBITMAP hbm)
static const WCHAR png_codecname[]
static const WCHAR jpeg_codecname[]
static void setpixel_32bppARGB(BYTE r, BYTE g, BYTE b, BYTE a, BYTE *row, UINT x)
GpStatus WINGDIPAPI GdipGetImageType(GpImage *image, ImageType *type)
static const struct image_format_dimension image_format_dimensions[]
GpStatus WINGDIPAPI GdipFindFirstImageItem(GpImage *image, ImageItemData *item)
GpStatus WINGDIPAPI GdipLoadImageFromStream(IStream *stream, GpImage **image)
static const WCHAR emf_extension[]
static const WCHAR wmf_extension[]
static ColorPalette * get_palette(IWICBitmapFrameDecode *frame, WICBitmapPaletteType palette_type)
GpStatus WINGDIPAPI GdipCreateBitmapFromStream(IStream *stream, GpBitmap **bitmap)
GpStatus WINGDIPAPI GdipInitializePalette(ColorPalette *palette, PaletteType type, INT desired, BOOL transparent, GpBitmap *bitmap)
static GpStatus initialize_decoder_wic(IStream *stream, REFGUID container, IWICBitmapDecoder **decoder)
static void setpixel_16bppRGB565(BYTE r, BYTE g, BYTE b, BYTE a, BYTE *row, UINT x)
static const WCHAR bmp_codecname[]
static const WCHAR tiff_codecname[]
static GpStatus get_screen_resolution(REAL *xres, REAL *yres)
static void getpixel_16bppRGB555(BYTE *r, BYTE *g, BYTE *b, BYTE *a, const BYTE *row, UINT x)
static BOOL get_bool_property(IWICMetadataReader *reader, const GUID *guid, const WCHAR *prop_name)
static void setpixel_1bppIndexed(BYTE r, BYTE g, BYTE b, BYTE a, BYTE *row, UINT x, ColorPalette *palette)
GpStatus WINGDIPAPI GdipImageRotateFlip(GpImage *image, RotateFlipType type)
GpStatus WINGDIPAPI GdipCloneBitmapArea(REAL x, REAL y, REAL width, REAL height, PixelFormat format, GpBitmap *srcBitmap, GpBitmap **dstBitmap)
GpStatus WINGDIPAPI GdipGetImageEncoders(UINT numEncoders, UINT size, ImageCodecInfo *encoders)
GpStatus WINGDIPAPI GdipGetPropertyItem(GpImage *image, PROPID propid, UINT size, PropertyItem *buffer)
static ULONG get_ulong_by_index(IWICMetadataReader *reader, ULONG index)
GpStatus WINGDIPAPI GdipLoadImageFromFileICM(GDIPCONST WCHAR *filename, GpImage **image)
GpStatus WINGDIPAPI GdipGetImageDecoders(UINT numDecoders, UINT size, ImageCodecInfo *decoders)
GpStatus WINGDIPAPI GdipCreateHBITMAPFromBitmap(GpBitmap *bitmap, HBITMAP *hbmReturn, ARGB background)
GpStatus WINGDIPAPI GdipTestControl(GpTestControlEnum control, void *param)
static const WCHAR png_format[]
static GpStatus select_frame_wic(GpImage *image, UINT active_frame)
static void getpixel_32bppARGB(BYTE *r, BYTE *g, BYTE *b, BYTE *a, const BYTE *row, UINT x)
GpStatus WINGDIPAPI GdipGetImageBounds(GpImage *image, GpRectF *srcRect, GpUnit *srcUnit)
static const struct image_codec codecs[NUM_CODECS]
static const BYTE wmf_sig_mask[]
static void set_histogram_point_r(ARGB color, UINT *ch0, UINT *ch1, UINT *ch2, UINT *ch3)
GpStatus WINGDIPAPI GdipCreateBitmapFromFileICM(GDIPCONST WCHAR *filename, GpBitmap **bitmap)
static const BYTE jpeg_sig_pattern[]
static PropertyItem * get_gif_loopcount(IWICMetadataReader *reader)
GpStatus WINGDIPAPI GdipCreateBitmapFromHICON(HICON hicon, GpBitmap **bitmap)
static void set_histogram_point_gray(ARGB color, UINT *ch0, UINT *ch1, UINT *ch2, UINT *ch3)
static const WCHAR png_extension[]
GpStatus WINGDIPAPI GdipImageForceValidation(GpImage *image)
HRESULT WINAPI WICCreateImagingFactory_Proxy(UINT, IWICImagingFactory **)
static const BYTE bmp_sig_pattern[]
static void setpixel_8bppIndexed(BYTE r, BYTE g, BYTE b, BYTE a, BYTE *row, UINT x, ColorPalette *palette)
static const BYTE tiff_sig_pattern[]
static const BYTE ico_sig_mask[]
GpStatus WINGDIPAPI GdipCreateEffect(const GUID guid, CGpEffect **effect)
GpStatus WINGDIPAPI GdipGetImageHorizontalResolution(GpImage *image, REAL *res)
GpStatus WINGDIPAPI GdipCloneImage(GpImage *image, GpImage **cloneImage)
GpStatus WINGDIPAPI GdipGetPropertyItemSize(GpImage *image, PROPID propid, UINT *size)
static void set_histogram_point_b(ARGB color, UINT *ch0, UINT *ch1, UINT *ch2, UINT *ch3)
GpStatus WINGDIPAPI GdipCreateBitmapFromStreamICM(IStream *stream, GpBitmap **bitmap)
static GpStatus decode_image_tiff(IStream *stream, GpImage **image)
static PropertyItem * get_gif_palette(IWICBitmapDecoder *decoder, IWICMetadataReader *reader)
static GpStatus decode_image_wic(IStream *stream, REFGUID container, metadata_reader_func metadata_reader, GpImage **image)
static GpStatus get_decoder_info_from_image(GpImage *image, const struct image_codec **result)
static UINT vt_to_itemtype(UINT vt)
GpStatus WINGDIPAPI GdipImageGetFrameDimensionsList(GpImage *image, GUID *dimensionIDs, UINT count)
static const WCHAR gif_mimetype[]
GpStatus WINGDIPAPI GdipBitmapUnlockBits(GpBitmap *bitmap, BitmapData *lockeddata)
#define WMF_PLACEABLE_KEY
static GpStatus decode_frame_wic(IWICBitmapDecoder *decoder, BOOL force_conversion, UINT active_frame, metadata_reader_func metadata_reader, GpImage **image)
static const WCHAR ico_mimetype[]
static const BYTE gif_sig_pattern[12]
GpStatus WINGDIPAPI GdipCreateBitmapFromHBITMAP(HBITMAP hbm, HPALETTE hpal, GpBitmap **bitmap)
GpStatus WINGDIPAPI GdipLoadImageFromStreamICM(IStream *stream, GpImage **image)
GpStatus WINGDIPAPI GdipSaveAdd(GpImage *image, GDIPCONST EncoderParameters *params)
static const WCHAR jpeg_extension[]
static GpStatus encode_image_wic(GpImage *image, IStream *stream, REFGUID container, GDIPCONST EncoderParameters *params)
static LONG get_gif_frame_property(IWICBitmapFrameDecode *frame, const GUID *format, const WCHAR *property)
static void setpixel_24bppRGB(BYTE r, BYTE g, BYTE b, BYTE a, BYTE *row, UINT x)
static UINT get_palette_index(BYTE r, BYTE g, BYTE b, BYTE a, ColorPalette *palette)
static const WCHAR wmf_codecname[]
GpStatus WINGDIPAPI GdipBitmapCreateApplyEffect(GpBitmap **inputBitmaps, INT numInputs, CGpEffect *effect, RECT *roi, RECT *outputRect, GpBitmap **outputBitmap, BOOL useAuxData, VOID **auxData, INT *auxDataSize)
static void gif_metadata_reader(GpBitmap *bitmap, IWICBitmapDecoder *decoder, UINT active_frame)
static const WCHAR ico_codecname[]
static HRESULT blit_gif_frame(GpBitmap *bitmap, IWICBitmapFrameDecode *frame, BOOL first_frame)
static GpStatus propvariant_to_item(PROPVARIANT *value, PropertyItem *item, UINT size, PROPID id)
static PropertyItem * get_property(IWICMetadataReader *reader, const GUID *guid, const WCHAR *prop_name)
static const WCHAR emf_format[]
static void getpixel_32bppPARGB(BYTE *r, BYTE *g, BYTE *b, BYTE *a, const BYTE *row, UINT x)
static const WCHAR gif_codecname[]
static const BYTE emf_sig_mask[]
static REFPROPVARIANT PROPVAR_CHANGE_FLAGS VARTYPE vt
HRESULT WINAPI PropVariantClear(PROPVARIANT *pvar)
HRESULT WINAPI WICConvertBitmapSource(REFWICPixelFormatGUID dstFormat, IWICBitmapSource *pISrc, IWICBitmapSource **ppIDst)
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
void WINGDIPAPI GdipFree(void *ptr)
GpStatus hresult_to_status(HRESULT res)
void convert_32bppARGB_to_32bppPARGB(UINT width, UINT height, BYTE *dst_bits, INT dst_stride, const BYTE *src_bits, INT src_stride)
void *WINGDIPAPI GdipAlloc(SIZE_T size)
REAL units_to_pixels(REAL units, GpUnit unit, REAL dpi)
#define GIF_DISPOSE_RESTORE_TO_PREV
#define GIF_DISPOSE_DO_NOT_DISPOSE
static INT gdip_round(REAL x)
static void image_unlock(GpImage *image, BOOL unlock)
GpStatus graphics_from_image(GpImage *image, GpGraphics **graphics) DECLSPEC_HIDDEN
#define GIF_DISPOSE_UNSPECIFIED
static BOOL image_lock(GpImage *image, BOOL *unlock)
GpStatus METAFILE_GetGraphicsContext(GpMetafile *metafile, GpGraphics **result) DECLSPEC_HIDDEN
#define GIF_DISPOSE_RESTORE_TO_BKGND
void METAFILE_Free(GpMetafile *metafile) DECLSPEC_HIDDEN
@ ImageFlagsHasRealPixelSize
@ ImageFlagsColorSpaceRGB
@ ImageFlagsColorSpaceGRAY
@ ImageCodecFlagsSupportBitmap
@ ImageCodecFlagsSupportVector
@ TestControlForceBilinear
@ TestControlGetBuildNumber
struct CGpEffect CGpEffect
#define PropertyTagIndexTransparent
#define PropertyTagFrameDelay
#define PropertyTagTypeShort
#define PropertyTagIndexBackground
@ ImageLockModeUserInputBuf
#define PropertyTagCopyright
#define PropertyTagTypeLong
#define PropertyTagGlobalPalette
#define PropertyTagImageTitle
#define PropertyTagPrimaryChromaticities
#define PropertyTagWhitePoint
#define PropertyTagTypeUndefined
#define PropertyTagImageDescription
#define PropertyTagTypeSLONG
#define PropertyTagTypeRational
#define PropertyTagTypeByte
#define PropertyTagEquipModel
#define PropertyTagTypeSRational
#define PropertyTagArtist
#define PropertyTagLoopCount
#define PropertyTagSoftwareUsed
#define PropertyTagTypeASCII
#define PropertyTagExifUserComment
struct GdiplusAbort GdiplusAbort
ImageAbort GetThumbnailImageAbort
GLint GLint GLint GLint GLint x
GLuint GLuint GLsizei count
GLuint GLuint GLsizei GLenum type
GLclampf GLclampf GLclampf alpha
GLint GLint GLint GLint GLint GLint y
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLint GLint GLsizei GLsizei height
GLdouble GLdouble GLdouble r
GLint GLint GLsizei width
GLdouble GLdouble GLdouble GLdouble top
GLboolean GLboolean GLboolean b
GLsizei GLsizei GLfloat distance
GLenum const GLfloat * params
GLenum GLuint GLenum GLsizei const GLchar * buf
GLenum GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * bits
GLuint GLsizei GLsizei * length
GLboolean GLboolean GLboolean GLboolean a
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
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 * u
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 GLint GLint j
LPVOID WINAPI CoTaskMemAlloc(SIZE_T size)
static const struct @468 keywords[]
#define memcpy(s1, s2, n)
#define comment(fmt, arg1)
static const char * dst_format
static HMODULE MODULEINFO DWORD cb
static const unsigned char metafile[]
static const CLSID IPropertyStorage UINT *static const PROPSPEC PROPVARIANT *static UINT const PROPSPEC PROPVARIANT PROPID
_In_ HBITMAP _In_ UINT _In_ UINT _Inout_ LPBITMAPINFO pbmi
static Real area(Real A[2], Real B[2], Real C[2])
#define IsEqualGUID(rguid1, rguid2)
#define IsEqualIID(riid1, riid2)
#define IsEqualCLSID(rclsid1, rclsid2)
static __inline const char * wine_dbgstr_guid(const GUID *id)
int seek(void *fd, ulong off, int mode)
static const WCHAR applicationW[]
select_image_func select_func
decode_image_func decode_func
encode_image_func encode_func
BITMAPINFOHEADER bmiHeader
#define FIELD_OFFSET(t, f)
HBITMAP WINAPI CreateDIBSection(HDC hDC, CONST BITMAPINFO *BitmapInfo, UINT Usage, VOID **Bits, HANDLE hSection, DWORD dwOffset)
UINT WINAPI GetPaletteEntries(HPALETTE hpal, UINT iStartIndex, UINT cEntries, LPPALETTEENTRY ppe)
@ WICBitmapEncoderNoCache
@ WICDecodeMetadataCacheOnLoad
@ WICBitmapPaletteTypeFixedHalftone256
@ WICBitmapPaletteTypeFixedGray256
@ WICBitmapPaletteTypeFixedBW
@ WICBitmapPaletteTypeFixedHalftone64
@ WICBitmapPaletteTypeFixedGray16
@ WICBitmapPaletteTypeFixedGray4
@ WICBitmapPaletteTypeFixedHalftone216
@ WICBitmapPaletteTypeFixedHalftone27
@ WICBitmapPaletteTypeFixedHalftone125
@ WICBitmapPaletteTypeFixedHalftone8
@ WICBitmapPaletteTypeFixedHalftone252
_In_ ULONG _In_ ULONG rgb
#define WINCODEC_ERR_PALETTEUNAVAILABLE
static const char appdata[]
BOOL WINAPI DeleteMetaFile(_In_ HMETAFILE)
BOOL WINAPI DeleteEnhMetaFile(_In_opt_ HENHMETAFILE)
int WINAPI GetDeviceCaps(_In_opt_ HDC, _In_ int)
int WINAPI GetObjectA(_In_ HANDLE h, _In_ int c, _Out_writes_bytes_opt_(c) LPVOID pv)
int WINAPI GetDIBits(_In_ HDC hdc, _In_ HBITMAP hbm, _In_ UINT start, _In_ UINT cLines, _Out_opt_ LPVOID lpvBits, _At_((LPBITMAPINFOHEADER) lpbmi, _Inout_) LPBITMAPINFO lpbmi, _In_ UINT usage)
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
HENHMETAFILE WINAPI CopyEnhMetaFileW(_In_ HENHMETAFILE hemfSrc, _In_opt_ LPCWSTR pszFile)
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
#define ENHMETA_SIGNATURE
HMETAFILE WINAPI SetMetaFileBitsEx(_In_ UINT cbBuffer, _In_reads_bytes_(cbBuffer) CONST BYTE *lpData)
HENHMETAFILE WINAPI SetEnhMetaFileBits(_In_ UINT nSize, _In_reads_bytes_(nSize) const BYTE *pb)
UINT WINAPI GetEnhMetaFileHeader(_In_ HENHMETAFILE hemf, _In_ UINT nSize, _Out_writes_bytes_opt_(nSize) LPENHMETAHEADER lpEnhMetaHeader)
BOOL WINAPI DeleteDC(_In_ HDC)
BOOL WINAPI PlayEnhMetaFile(_In_ HDC, _In_ HENHMETAFILE, _In_ LPCRECT)
HICON WINAPI CreateIcon(_In_opt_ HINSTANCE, _In_ int, _In_ int, _In_ BYTE, _In_ BYTE, _In_ const BYTE *, _In_ const BYTE *)
BOOL WINAPI GetIconInfo(_In_ HICON, _Out_ PICONINFO)
#define LR_CREATEDIBSECTION
HANDLE WINAPI LoadImageW(_In_opt_ HINSTANCE hInst, _In_ LPCWSTR name, _In_ UINT type, _In_ int cx, _In_ int cy, _In_ UINT fuLoad)
BOOL WINAPI SetRect(_Out_ LPRECT, _In_ int, _In_ int, _In_ int, _In_ int)