60#define BITMAP_FORMAT_BMP 0x4d42
61#define BITMAP_FORMAT_JPEG 0xd8ff
62#define BITMAP_FORMAT_GIF 0x4947
63#define BITMAP_FORMAT_PNG 0x5089
64#define BITMAP_FORMAT_APM 0xcdd7
202 TRACE(
"bitmap handle %p\n",
This->desc.bmp.hbitmap);
203 if(
GetObjectW(
This->desc.bmp.hbitmap,
sizeof(bm), &bm) !=
sizeof(bm)) {
204 ERR(
"GetObject fails\n");
231 TRACE(
"icon handle %p\n",
This->desc.icon.hicon);
238 ERR(
"GetObject fails on icon bitmap\n");
255 ERR(
"GetIconInfo() fails on icon %p\n",
This->desc.icon.hicon);
307 newObject->
fOwn = fOwn;
319 newObject->
desc = *pictDesc;
327 TRACE(
"metafile handle %p\n", pictDesc->
wmf.hmeta);
342 FIXME(
"EMF is not supported\n");
355 TRACE(
"returning %p\n", newObject);
371 IConnectionPoint_Release(
Obj->pCP);
374 switch(
Obj->desc.picType) {
394 FIXME(
"Unsupported type %d - unable to delete\n",
Obj->desc.picType);
408 TRACE(
"%p, refcount %lu.\n", iface, refCount);
419 TRACE(
"%p, refcount %lu.\n", iface, refCount);
441 *ppvObject = &
This->IPicture_iface;
443 *ppvObject = &
This->IDispatch_iface;
445 *ppvObject = &
This->IDispatch_iface;
447 *ppvObject = &
This->IPersistStream_iface;
449 *ppvObject = &
This->IConnectionPointContainer_iface;
457 IPicture_AddRef(iface);
473 if (IConnectionPoint_EnumConnections(this->pCP, &pEnum) !=
S_OK)
475 while(IEnumConnections_Next(pEnum, 1, &CD,
NULL) ==
S_OK) {
479 IPropertyNotifySink_OnChanged(
sink, dispID);
480 IPropertyNotifySink_Release(
sink);
481 IUnknown_Release(CD.pUnk);
483 IEnumConnections_Release(pEnum);
498 switch(
This->desc.picType) {
516 FIXME(
"Unimplemented type %d\n",
This->desc.picType);
519 TRACE(
"returning handle %08x\n", *phandle);
551 TRACE(
"(%p)->(%p): type is %d\n",
This, ptype,
This->desc.picType);
556 *ptype =
This->desc.picType;
563 TRACE(
"%p, %p.\n", iface, pwidth);
564 *pwidth =
This->himetricWidth;
571 TRACE(
"%p, %p.\n", iface, pheight);
572 *pheight =
This->himetricHeight;
578 OLE_XSIZE_HIMETRIC cxSrc, OLE_YSIZE_HIMETRIC cySrc,
HBITMAP hbmMask,
HBITMAP hbmXor)
599 StretchBlt(
hdc,
x,
y,
cx,
cy, hdcBmp, xSrc, ySrc, cxSrc, cySrc,
SRCAND);
604 StretchBlt(
hdc,
x,
y,
cx,
cy, hdcBmp, xSrc, ySrc, cxSrc, cySrc,
SRCPAINT);
612 StretchBlt(
hdc,
x,
y,
cx,
cy, hdcBmp, xSrc, ySrc, cxSrc, cySrc,
SRCCOPY);
623 OLE_XPOS_HIMETRIC xSrc,
624 OLE_YPOS_HIMETRIC ySrc,
625 OLE_XSIZE_HIMETRIC cxSrc,
626 OLE_YSIZE_HIMETRIC cySrc,
630 TRACE(
"%p, %p, (%ld,%ld), (%ld,%ld), (%ld,%ld), (%ld,%ld), %p)\n", iface,
hdc,
x,
y,
cx,
cy, xSrc, ySrc,
631 cxSrc, cySrc, prcWBounds);
635 if(
cx == 0 ||
cy == 0 || cxSrc == 0 || cySrc == 0){
645 switch(
This->desc.picType) {
656 hbmMask =
This->hbmMask;
657 hbmXor =
This->hbmXor;
662 hbmXor =
This->desc.bmp.hbitmap;
665 render_masked_bitmap(
This,
hdc,
x,
y,
cx,
cy, xSrc, ySrc, cxSrc, cySrc, hbmMask, hbmXor);
676 render_masked_bitmap(
This,
hdc,
x,
y,
cx,
cy, xSrc, ySrc, cxSrc, cySrc,
info.hbmMask,
info.hbmColor);
685 POINT prevOrg, prevWndOrg;
686 SIZE prevExt, prevWndExt;
700 ERR(
"PlayMetaFile failed!\n");
720 FIXME(
"type %d not implemented\n",
This->desc.picType);
754 if (phdc) *phdc =
This->hDCCur;
764 OLE_HANDLE *phbmpOut)
767 TRACE(
"(%p)->(%p, %p, %p)\n",
This, hdcIn, phdcOut, phbmpOut);
770 *phdcOut =
This->hDCCur;
773 This->hDCCur = hdcIn;
778 FIXME(
"Don't know how to select picture type %d\n",
This->desc.picType);
793 *pfKeep =
This->keepOrigFormat;
805 This->keepOrigFormat = keep;
831 FIXME(
"(%p)->(%p, %d, %p), hacked stub.\n",
This, pstream, SaveMemCopy, pcbSize);
832 return IStream_Write(pstream,
This->data,
This->datalen,(
ULONG*)pcbSize);
848 switch (
This->desc.picType) {
852 case PICTYPE_ICON: *pdwAttr = PICTURE_TRANSPARENT;
break;
854 case PICTYPE_METAFILE: *pdwAttr = PICTURE_TRANSPARENT|PICTURE_SCALABLE;
break;
855 default:
FIXME(
"Unknown pictype %d\n",
This->desc.picType);
break;
871 return IPicture_QueryInterface(&
This->IPicture_iface,
riid,ppvoid);
879 return IPicture_AddRef(&
This->IPicture_iface);
887 return IPicture_Release(&
This->IPicture_iface);
933 return IPicture_QueryInterface(&
This->IPicture_iface,
riid, ppvoid);
946 return IPicture_AddRef(&
This->IPicture_iface);
959 return IPicture_Release(&
This->IPicture_iface);
968 TRACE(
"(%p)\n", pClassID);
1003 if (
This->desc.bmp.hbitmap == 0)
1027 hr = IWICBitmapSource_GetSize(real_source, &
width, &
height);
1030 bih.
biSize =
sizeof(bih);
1056 hr = IWICBitmapSource_CopyPixels(real_source, &rc,
stride, buffersize,
bits);
1069 if (
This->desc.bmp.hbitmap == 0)
1083 if((*pixel & 0x80000000) == 0)
1095 HDC hdcBmp, hdcXor, hdcMask;
1096 HBITMAP hbmoldBmp, hbmoldXor, hbmoldMask;
1133 IWICBitmapSource_Release(real_source);
1149 &IID_IWICImagingFactory, (
void**)&
factory);
1153 IWICImagingFactory_Release(
factory);
1158 hr = IWICStream_InitializeFromMemory(
stream, xbuf, xread);
1163 &IID_IWICBitmapDecoder, (
void**)&
decoder);
1169 hr = IWICBitmapDecoder_GetFrame(
decoder, 0, &framedecode);
1171 IWICBitmapDecoder_Release(
decoder);
1175 IWICStream_Release(
stream);
1181 IWICBitmapFrameDecode_Release(framedecode);
1199 TRACE(
"(this %p, xbuf %p, xread %lu)\n",
This, xbuf, xread);
1221 ERR(
"Invalid icon count of zero.\n");
1237 ERR(
"Icon data address %lu is over %lu bytes available.\n",
1270 ERR(
"CreateIcon failed.\n");
1274 This->desc.icon.hicon = hicon;
1292 if (!hemf)
return E_FAIL;
1297 This->desc.emf.hemf = hemf;
1299 This->origWidth = 0;
1300 This->origHeight = 0;
1301 This->himetricWidth =
hdr.rclFrame.right -
hdr.rclFrame.left;
1302 This->himetricHeight =
hdr.rclFrame.bottom -
hdr.rclFrame.top;
1315 if (
header->key != 0x9ac6cdd7)
1323 This->desc.wmf.hmeta = hmf;
1324 This->desc.wmf.xExt = 0;
1325 This->desc.wmf.yExt = 0;
1327 This->origWidth = 0;
1328 This->origHeight = 0;
1348 ULONG xread, toread;
1374 hr = IStream_Stat(pStm,&statstg,STATFLAG_NONAME);
1376 TRACE(
"stat failed with hres %#lx, proceeding to read all data.\n",
hr);
1379 statstg.cbSize.QuadPart = 8;
1384 headerisdata =
FALSE;
1386 hr = IStream_Read(pStm,
header, 8, &xread);
1387 if (
hr !=
S_OK || xread!=8) {
1388 ERR(
"Failure while reading picture header (hr is %#lx, nread is %ld).\n",
hr,xread);
1391 headerread += xread;
1394 if (!
memcmp(&(
header[0]),
"lt\0\0", 4) && (statfailed || (
header[1] + headerread <= statstg.cbSize.QuadPart))) {
1395 if (toread != 0 && toread !=
header[1])
1396 FIXME(
"varying lengths of image data (prev=%lu curr=%lu), only last one will be used\n",
1401 statstg.cbSize.QuadPart =
header[1] + 8;
1404 if (toread == 0)
break;
1410 (
header[0] == 0x10000) ||
1411 (
header[0] == 0x20000) ||
1412 (
header[1] > statstg.cbSize.QuadPart)||
1415 headerisdata =
TRUE;
1417 toread = statstg.cbSize.QuadPart-8;
1421 FIXME(
"Unknown stream header magic: %#lx.\n",
header[0]);
1425 }
while (!headerisdata);
1428 unsigned int sizeinc = 4096;
1429 unsigned int origsize = sizeinc;
1432 TRACE(
"Reading all data from stream.\n");
1433 xbuf =
calloc(1, origsize);
1437 while (xread < origsize) {
1438 hr = IStream_Read(pStm,xbuf+xread,origsize-xread,&
nread);
1445 if (xread == origsize) {
1446 sizeinc = 2*sizeinc;
1447 xbuf =
realloc(xbuf, origsize + sizeinc);
1448 memset(xbuf + origsize, 0, sizeinc);
1449 origsize += sizeinc;
1453 TRACE(
"hr in no-stat loader case is %#lx.\n",
hr);
1454 TRACE(
"loaded %ld bytes.\n", xread);
1455 This->datalen = xread;
1458 This->datalen = toread+(headerisdata?8:0);
1466 while (xread < This->
datalen) {
1468 hr = IStream_Read(pStm,xbuf+xread,
This->datalen-xread,&
nread);
1473 if (xread !=
This->datalen)
1474 ERR(
"Could only read %ld of %d bytes out of stream?\n", xread,
This->datalen);
1476 if (
This->datalen == 0) {
1486 magic = xbuf[0] + (xbuf[1]<<8);
1487 This->loadtime_format = magic;
1517 FIXME(
"Unknown magic %04x, %ld read bytes:\n", magic, xread);
1519 for (
i=0;
i<xread+8;
i++) {
1521 else FIXME(
"%02x ",xbuf[
i-8]);
1522 if (
i % 10 == 9)
FIXME(
"\n");
1559 info->bmiHeader.biSize =
sizeof(
info->bmiHeader);
1562 info->bmiHeader.biPlanes = 1;
1563 info->bmiHeader.biBitCount = 24;
1587 info->bmiHeader.biSize =
sizeof(
info->bmiHeader);
1594 if (
info->bmiHeader.biClrUsed != 0) {
1595 numentries =
info->bmiHeader.biClrUsed;
1596 if (numentries > 256)
1599 if (
info->bmiHeader.biBitCount <= 8)
1600 numentries = 1 <<
info->bmiHeader.biBitCount;
1608 numentries *
sizeof(
RGBQUAD) +
1609 info->bmiHeader.biSizeImage;
1658 *ppBuffer =
NULL; *pLength = 0;
1662 unsigned char * pIconData =
NULL;
1663 unsigned int iDataSize = 0;
1676 unsigned int iOffsetPalette;
1677 unsigned int iOffsetColorData;
1678 unsigned int iOffsetMaskData;
1680 unsigned int iLengthScanLineMask;
1681 unsigned int iNumEntriesPalette;
1697 pIconData =
calloc(1, iDataSize);
1720 *pIconBitmapHeader = pInfoBitmap->
bmiHeader;
1727 if (iNumEntriesPalette > 256) iNumEntriesPalette = 256;
1730 iNumEntriesPalette = 3;
1734 iNumEntriesPalette = 0;
1738 iOffsetPalette = iDataSize;
1739 iDataSize += iNumEntriesPalette *
sizeof(
DWORD);
1740 iOffsetColorData = iDataSize;
1742 iOffsetMaskData = iDataSize;
1743 iDataSize += pIconBitmapHeader->
biHeight * iLengthScanLineMask;
1746 pIconData =
realloc(pIconData, iDataSize);
1754 if (iNumEntriesPalette > 0) {
1756 iNumEntriesPalette *
sizeof(
RGBQUAD));
1760 memset(pIconData + iOffsetMaskData, 0, iDataSize - iOffsetMaskData);
1777 *ppBuffer = pIconData; *pLength = iDataSize;
1808 unsigned int iDataSize;
1813 TRACE(
"%p %p %d\n",
This, pStm, fClearDirty);
1815 switch (
This->desc.picType) {
1823 if (
This->bIsDirty || !
This->data) {
1825 ERR(
"(%p,%p,%d), serializeIcon() failed\n",
This, pStm, fClearDirty);
1830 This->data = pIconData;
1831 This->datalen = iDataSize;
1834 header[0] = (
This->loadtime_magic != 0xdeadbeef) ?
This->loadtime_magic : 0x0000746c;
1841 if (
This->bIsDirty || !
This->data) {
1847 FIXME(
"(%p,%p,%d), PICTYPE_BITMAP (format JPEG) not implemented!\n",
This,pStm,fClearDirty);
1850 FIXME(
"(%p,%p,%d), PICTYPE_BITMAP (format GIF) not implemented!\n",
This,pStm,fClearDirty);
1853 FIXME(
"(%p,%p,%d), PICTYPE_BITMAP (format PNG) not implemented!\n",
This,pStm,fClearDirty);
1856 FIXME(
"(%p,%p,%d), PICTYPE_BITMAP (format UNKNOWN, using BMP?) not implemented!\n",
This,pStm,fClearDirty);
1860 if (hResult !=
S_OK)
1864 This->data = pIconData;
1865 This->datalen = iDataSize;
1868 header[0] = (
This->loadtime_magic != 0xdeadbeef) ?
This->loadtime_magic : 0x0000746c;
1875 FIXME(
"(%p,%p,%d), PICTYPE_METAFILE not implemented!\n",
This,pStm,fClearDirty);
1878 FIXME(
"(%p,%p,%d),PICTYPE_ENHMETAFILE not implemented!\n",
This,pStm,fClearDirty);
1881 FIXME(
"(%p,%p,%d), [unknown type] not implemented!\n",
This,pStm,fClearDirty);
1899 switch (
This->desc.picType) {
1904 FIXME(
"(%p), PICTYPE_ICON not implemented!\n",
This);
1907 if (
This->bIsDirty || !
This->data) {
1913 FIXME(
"(%p), PICTYPE_BITMAP (format JPEG) not implemented!\n",
This);
1916 FIXME(
"(%p), PICTYPE_BITMAP (format GIF) not implemented!\n",
This);
1919 FIXME(
"(%p), PICTYPE_BITMAP (format PNG) not implemented!\n",
This);
1922 FIXME(
"(%p), PICTYPE_BITMAP (format UNKNOWN, using BMP?) not implemented!\n",
This);
1929 FIXME(
"(%p), PICTYPE_METAFILE not implemented!\n",
This);
1932 FIXME(
"(%p), PICTYPE_ENHMETAFILE not implemented!\n",
This);
1935 FIXME(
"(%p), [unknown type] not implemented!\n",
This);
1961 return IPicture_QueryInterface(&
This->IPicture_iface,
riid, ppvoid);
1974 return IPicture_AddRef(&
This->IPicture_iface);
1987 return IPicture_Release(&
This->IPicture_iface);
1997 unsigned int* pctinfo)
1999 TRACE(
"(%p)\n", pctinfo);
2020 TRACE(
"(iTInfo=%d, lcid=%04x, %p)\n", iTInfo, (
int)
lcid, ppTInfo);
2028 ERR(
"Could not load stdole2.tlb\n");
2034 ERR(
"Did not get IPictureDisp typeinfo from typelib, hres %#lx.\n",
hres);
2047 LPOLESTR* rgszNames,
2056 rgszNames, cNames, (
int)
lcid, rgDispId);
2069 ERR(
"GetTypeInfo failed.\n");
2075 ITypeInfo_Release(pTInfo);
2092 DISPPARAMS* pDispParams,
2094 EXCEPINFO* pExepInfo,
2110 ERR(
"null pDispParams not allowed\n");
2116 if (pDispParams->cArgs != 0)
2118 ERR(
"param count for DISPATCH_PROPERTYGET was %d instead of 0\n", pDispParams->cArgs);
2123 ERR(
"null pVarResult not allowed when DISPATCH_PROPERTYGET specified\n");
2129 if (pDispParams->cArgs != 1)
2131 ERR(
"param count for DISPATCH_PROPERTYPUT was %d instead of 1\n", pDispParams->cArgs);
2136 switch (dispIdMember)
2141 TRACE(
"DISPID_PICT_HANDLE\n");
2143 return IPicture_get_Handle(&
This->IPicture_iface, &
V_UINT(pVarResult));
2149 TRACE(
"DISPID_PICT_HPAL\n");
2151 return IPicture_get_hPal(&
This->IPicture_iface, &
V_UINT(pVarResult));
2157 TRACE(
"DISPID_PICT_HPAL\n");
2164 hr = IPicture_set_hPal(&
This->IPicture_iface,
V_I4(&vararg));
2173 TRACE(
"DISPID_PICT_TYPE\n");
2181 TRACE(
"DISPID_PICT_WIDTH\n");
2183 return IPicture_get_Width(&
This->IPicture_iface, &
V_I4(pVarResult));
2189 TRACE(
"DISPID_PICT_HEIGHT\n");
2191 return IPicture_get_Height(&
This->IPicture_iface, &
V_I4(pVarResult));
2200 TRACE(
"DISPID_PICT_RENDER\n");
2202 if (pDispParams->cArgs != 10)
2206 for (
i = 0;
i < pDispParams->cArgs;
i++)
2209 ERR(
"DISPID_PICT_RENDER: wrong argument type %d:%d\n",
i,
V_VT(&
args[
i]));
2215 return IPicture_Render(&
This->IPicture_iface,
2230 ERR(
"invalid dispid %#lx or wFlags 0x%x\n", dispIdMember,
wFlags);
2292 BOOL Own,
void **ppvObj )
2329 TRACE(
"%p, %ld, %d, %s, %p), partially implemented.\n",
2337 ERR(
"Could not get IPersistStream iface from Ole Picture?\n");
2338 IPicture_Release(newpic);
2342 hr = IPersistStream_Load(ps,lpstream);
2343 IPersistStream_Release(ps);
2346 ERR(
"IPersistStream_Load failed\n");
2347 IPicture_Release(newpic);
2351 hr = IPicture_QueryInterface(newpic,
riid,ppvObj);
2354 IPicture_Release(newpic);
2368 FIXME(
"%p, %ld, %d, %s, %lu, %lu, %#lx, %p, partially implemented.\n",
2376 ERR(
"Could not get IPersistStream iface from Ole Picture?\n");
2377 IPicture_Release(newpic);
2381 hr = IPersistStream_Load(ps,lpstream);
2382 IPersistStream_Release(ps);
2385 ERR(
"IPersistStream_Load failed\n");
2386 IPicture_Release(newpic);
2390 hr = IPicture_QueryInterface(newpic,
riid,ppvObj);
2393 IPicture_Release(newpic);
2481 WCHAR *file_candidate;
2487 if (!szURLorPath || !ppvRet)
2493 if (
wcsncmp(szURLorPath,
L"file:", 5) == 0) {
2500 file_candidate = path_buf;
2503 file_candidate = szURLorPath;
2506 if (file_candidate[1] ==
':') {
2520 hRes = IMoniker_BindToStorage(pmnk, pbc,
NULL, &IID_IStream, (
LPVOID*)&
stream);
2521 IMoniker_Release(pmnk);
2523 IBindCtx_Release(pbc);
2581 FIXME(
"(%p)->(%d),stub!\n",
This,dolock);
#define InterlockedIncrement
#define InterlockedDecrement
static const char * wine_dbgstr_rect(const RECT *prc)
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
HRESULT CreateConnectionPoint(IUnknown *pUnk, REFIID riid, IConnectionPoint **pCP)
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, IUnknown *outer, DWORD cls_context, REFIID riid, void **obj)
HRESULT WINAPI CreateStreamOnHGlobal(HGLOBAL hGlobal, BOOL delete_on_release, IStream **stream)
#define ReadFile(a, b, c, d, e)
#define INVALID_HANDLE_VALUE
DWORD WINAPI GetFileSize(HANDLE hFile, LPDWORD lpFileSizeHigh)
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
_ACRTIMP int __cdecl wcsncmp(const wchar_t *, const wchar_t *, size_t)
HRESULT WINAPI CoInitialize(LPVOID lpReserved)
HRESULT WINAPI DispGetIDsOfNames(ITypeInfo *ptinfo, OLECHAR **rgszNames, UINT cNames, DISPID *rgdispid)
static HRESULT WINAPI OLEPictureImpl_get_Type(IPicture *iface, short *ptype)
static const IConnectionPointContainerVtbl OLEPictureImpl_IConnectionPointContainer_VTable
static HRESULT WINAPI OLEPictureImpl_set_hPal(IPicture *iface, OLE_HANDLE hpal)
static HRESULT WINAPI OLEPictureImpl_IDispatch_QueryInterface(IDispatch *iface, REFIID riid, VOID **ppvoid)
static HRESULT WINAPI OLEPictureImpl_get_Handle(IPicture *iface, OLE_HANDLE *phandle)
static OLE_YSIZE_HIMETRIC ypixels_to_himetric(INT pixels, HDC hdc)
static HRESULT OLEPictureImpl_LoadWICSource(OLEPictureImpl *This, IWICBitmapSource *src)
static HRESULT OLEPictureImpl_Construct(LPPICTDESC pictDesc, BOOL fOwn, OLEPictureImpl **pict)
static OLEPictureImpl * impl_from_IPicture(IPicture *iface)
static HRESULT WINAPI OLEPictureImpl_PictureChanged(IPicture *iface)
static HRESULT OLEPictureImpl_LoadWICDecoder(OLEPictureImpl *This, REFCLSID decoder_clsid, BYTE *xbuf, ULONG xread)
static ULONG WINAPI OLEPictureImpl_IPersistStream_Release(IPersistStream *iface)
static const IPersistStreamVtbl OLEPictureImpl_IPersistStream_VTable
static const IClassFactoryVtbl SPCF_Vtbl
HRESULT WINAPI OleCreatePictureIndirect(LPPICTDESC lpPictDesc, REFIID riid, BOOL Own, void **ppvObj)
static HRESULT WINAPI OLEPictureImpl_Save(IPersistStream *iface, IStream *pStm, BOOL fClearDirty)
static void OLEPictureImpl_Destroy(OLEPictureImpl *Obj)
static HRESULT WINAPI OLEPictureImpl_Render(IPicture *iface, HDC hdc, LONG x, LONG y, LONG cx, LONG cy, OLE_XPOS_HIMETRIC xSrc, OLE_YPOS_HIMETRIC ySrc, OLE_XSIZE_HIMETRIC cxSrc, OLE_YSIZE_HIMETRIC cySrc, LPCRECT prcWBounds)
static ULONG WINAPI OLEPictureImpl_IDispatch_Release(IDispatch *iface)
static HRESULT WINAPI OLEPictureImpl_Invoke(IDispatch *iface, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExepInfo, UINT *puArgErr)
static ULONG WINAPI SPCF_AddRef(LPCLASSFACTORY iface)
static ULONG WINAPI OLEPictureImpl_Release(IPicture *iface)
static HRESULT WINAPI OLEPictureImpl_SelectPicture(IPicture *iface, HDC hdcIn, HDC *phdcOut, OLE_HANDLE *phbmpOut)
#define BITMAP_FORMAT_JPEG
static ULONG WINAPI OLEPictureImpl_IDispatch_AddRef(IDispatch *iface)
static HRESULT WINAPI OLEPictureImpl_get_hPal(IPicture *iface, OLE_HANDLE *phandle)
static ULONG WINAPI SPCF_Release(LPCLASSFACTORY iface)
static HRESULT WINAPI OLEPictureImpl_put_KeepOriginalFormat(IPicture *iface, BOOL keep)
static IClassFactoryImpl STDPIC_CF
static HRESULT WINAPI OLEPictureImpl_QueryInterface(IPicture *iface, REFIID riid, void **ppvObject)
static HRESULT WINAPI OLEPictureImpl_Load(IPersistStream *iface, IStream *pStm)
static OLEPictureImpl * impl_from_IDispatch(IDispatch *iface)
static HRESULT WINAPI OLEPictureImpl_SaveAsFile(IPicture *iface, IStream *pstream, BOOL SaveMemCopy, LONG *pcbSize)
void _get_STDPIC_CF(LPVOID *ppv)
static HRESULT WINAPI OLEPictureImpl_IsDirty(IPersistStream *iface)
static HRESULT WINAPI SPCF_QueryInterface(LPCLASSFACTORY iface, REFIID riid, LPVOID *ppobj)
static void OLEPicture_SendNotify(OLEPictureImpl *this, DISPID dispID)
static void OLEPictureImpl_SetIcon(OLEPictureImpl *This)
static const IDispatchVtbl OLEPictureImpl_IDispatch_VTable
static OLE_XSIZE_HIMETRIC xpixels_to_himetric(INT pixels, HDC hdc)
HRESULT WINAPI OleLoadPicturePath(LPOLESTR szURLorPath, LPUNKNOWN punkCaller, DWORD dwReserved, OLE_COLOR clrReserved, REFIID riid, LPVOID *ppvRet)
#define BITMAP_FORMAT_GIF
static BOOL serializeIcon(HICON hIcon, void **ppBuffer, unsigned int *pLength)
static HRESULT WINAPI OLEPictureImpl_GetIDsOfNames(IDispatch *iface, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
HRESULT WINAPI OleSavePictureFile(IDispatch *picture, BSTR filename)
static void render_masked_bitmap(OLEPictureImpl *This, HDC hdc, LONG x, LONG y, LONG cx, LONG cy, OLE_XPOS_HIMETRIC xSrc, OLE_YPOS_HIMETRIC ySrc, OLE_XSIZE_HIMETRIC cxSrc, OLE_YSIZE_HIMETRIC cySrc, HBITMAP hbmMask, HBITMAP hbmXor)
static HRESULT WINAPI OLEPictureImpl_IConnectionPointContainer_QueryInterface(IConnectionPointContainer *iface, REFIID riid, VOID **ppvoid)
struct _APM_HEADER APM_HEADER
static HRESULT OLEPictureImpl_LoadIcon(OLEPictureImpl *This, BYTE *xbuf, ULONG xread)
static HRESULT WINAPI OLEPictureImpl_get_Height(IPicture *iface, OLE_YSIZE_HIMETRIC *pheight)
static void OLEPictureImpl_SetBitmap(OLEPictureImpl *This)
static const IPictureVtbl OLEPictureImpl_VTable
static ULONG WINAPI OLEPictureImpl_IPersistStream_AddRef(IPersistStream *iface)
static HRESULT OLEPictureImpl_LoadDIB(OLEPictureImpl *This, BYTE *xbuf, ULONG xread)
static HRESULT WINAPI OLEPictureImpl_EnumConnectionPoints(IConnectionPointContainer *iface, IEnumConnectionPoints **ppEnum)
static HRESULT WINAPI OLEPictureImpl_GetTypeInfoCount(IDispatch *iface, unsigned int *pctinfo)
static HRESULT WINAPI OLEPictureImpl_get_Width(IPicture *iface, OLE_XSIZE_HIMETRIC *pwidth)
static HRESULT serializeBMP(HBITMAP hbmp, void **buffer, unsigned int *length)
static OLEPictureImpl * impl_from_IPersistStream(IPersistStream *iface)
#define BITMAP_FORMAT_APM
static HRESULT WINAPI SPCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
static HRESULT WINAPI OLEPictureImpl_get_CurDC(IPicture *iface, HDC *phdc)
static ULONG WINAPI OLEPictureImpl_IConnectionPointContainer_Release(IConnectionPointContainer *iface)
static HRESULT WINAPI SPCF_LockServer(LPCLASSFACTORY iface, BOOL dolock)
static HRESULT WINAPI OLEPictureImpl_FindConnectionPoint(IConnectionPointContainer *iface, REFIID riid, IConnectionPoint **ppCP)
static ULONG WINAPI OLEPictureImpl_AddRef(IPicture *iface)
static HRESULT WINAPI OLEPictureImpl_get_Attributes(IPicture *iface, DWORD *pdwAttr)
static HRESULT WINAPI OLEPictureImpl_GetSizeMax(IPersistStream *iface, ULARGE_INTEGER *size)
static HRESULT WINAPI OLEPictureImpl_IPersistStream_QueryInterface(IPersistStream *iface, REFIID riid, VOID **ppvoid)
static OLEPictureImpl * impl_from_IConnectionPointContainer(IConnectionPointContainer *iface)
static HRESULT OLEPictureImpl_LoadEnhMetafile(OLEPictureImpl *This, const BYTE *data, ULONG size)
#define BITMAP_FORMAT_PNG
HRESULT WINAPI OleLoadPicture(LPSTREAM lpstream, LONG lSize, BOOL fRunmode, REFIID riid, LPVOID *ppvObj)
static ULONG WINAPI OLEPictureImpl_IConnectionPointContainer_AddRef(IConnectionPointContainer *iface)
HRESULT WINAPI OleLoadPictureFile(VARIANT filename, IDispatch **picture)
static HRESULT OLEPictureImpl_LoadAPM(OLEPictureImpl *This, const BYTE *data, ULONG size)
static HRESULT WINAPI OLEPictureImpl_GetTypeInfo(IDispatch *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
static IClassFactoryImpl * impl_from_IClassFactory(IClassFactory *iface)
static HRESULT WINAPI OLEPictureImpl_get_KeepOriginalFormat(IPicture *iface, BOOL *pfKeep)
#define BITMAP_FORMAT_BMP
HRESULT WINAPI OleLoadPictureEx(LPSTREAM lpstream, LONG lSize, BOOL fRunmode, REFIID riid, DWORD xsiz, DWORD ysiz, DWORD flags, LPVOID *ppvObj)
static HRESULT WINAPI OLEPictureImpl_GetClassID(IPersistStream *iface, CLSID *pClassID)
static HRESULT create_stream(const WCHAR *filename, IStream **stream)
HRESULT WINAPI LoadTypeLib(const OLECHAR *szFile, ITypeLib **pptLib)
HRESULT WINAPI CoInternetParseUrl(LPCWSTR pwzUrl, PARSEACTION ParseAction, DWORD dwFlags, LPWSTR pszResult, DWORD cchResult, DWORD *pcchResult, DWORD dwReserved)
HRESULT WINAPI WICConvertBitmapSource(REFWICPixelFormatGUID dstFormat, IWICBitmapSource *pISrc, IWICBitmapSource **ppIDst)
static VOID BitBlt(_In_ ULONG Left, _In_ ULONG Top, _In_ ULONG Width, _In_ ULONG Height, _In_reads_bytes_(Height *Stride) PUCHAR Buffer, _In_ ULONG BitsPerPixel, _In_ ULONG Stride)
GLint GLint GLint GLint GLint x
GLint GLint GLsizei GLsizei GLsizei GLint GLenum GLenum const GLvoid * pixels
GLint GLint GLint GLint GLint GLint y
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLint GLint GLsizei GLsizei height
GLint GLint GLsizei width
GLenum GLuint GLenum GLsizei const GLchar * buf
GLenum GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * bits
GLuint GLsizei GLsizei * length
GLsizei GLenum GLboolean sink
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
HGLOBAL NTAPI GlobalFree(HGLOBAL hMem)
HGLOBAL NTAPI GlobalAlloc(UINT uFlags, SIZE_T dwBytes)
int const JOCTET unsigned int datalen
#define memcpy(s1, s2, n)
#define ERROR_FILE_NOT_FOUND
static VARIANTARG static DISPID
_In_ HANDLE _In_ DWORD _In_ DWORD _Inout_opt_ LPOVERLAPPED _In_opt_ LPTRANSMIT_FILE_BUFFERS _In_ DWORD dwReserved
INT WINAPI MulDiv(INT nNumber, INT nNumerator, INT nDenominator)
interface IPersistStream * LPPERSISTSTREAM
interface IStream * LPSTREAM
HRESULT WINAPI CreateBindCtx(DWORD reserved, IBindCtx **bind_context)
#define DISPATCH_PROPERTYPUT
#define DISPATCH_PROPERTYGET
#define PICTYPE_UNINITIALIZED
#define CTL_E_PATHFILEACCESSERROR
#define PICTYPE_ENHMETAFILE
#define DISPID_PICT_RENDER
#define DISPID_PICT_WIDTH
#define CTL_E_FILENOTFOUND
#define CONNECT_E_NOCONNECTION
#define CTL_E_INVALIDPROPERTYVALUE
#define DISPID_PICT_HANDLE
#define DISPID_PICT_HEIGHT
const GUID CLSID_StdPicture
const GUID IID_IConnectionPointContainer
const GUID IID_IConnectionPoint
const GUID IID_IPropertyNotifySink
const GUID IID_IPictureDisp
const GUID IID_IPersistStream
_Out_opt_ int _Out_opt_ int * cy
#define IsEqualGUID(rguid1, rguid2)
#define IsEqualIID(riid1, riid2)
CURSORICONFILEDIRENTRY idEntries[1]
unsigned int loadtime_magic
IConnectionPointContainer IConnectionPointContainer_iface
OLE_YSIZE_HIMETRIC himetricHeight
IDispatch IDispatch_iface
OLE_XSIZE_HIMETRIC himetricWidth
unsigned int loadtime_format
IPersistStream IPersistStream_iface
BITMAPINFOHEADER bmiHeader
struct tagPICTDESC::@3475::@3477 wmf
#define CONTAINING_RECORD(address, type, field)
HRESULT WINAPI CreateURLMoniker(IMoniker *pmkContext, LPCWSTR szURL, IMoniker **ppmk)
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
HRESULT WINAPI VariantChangeTypeEx(VARIANTARG *pvargDest, const VARIANTARG *pvargSrc, LCID lcid, USHORT wFlags, VARTYPE vt)
void WINAPI VariantInit(VARIANTARG *pVarg)
HBITMAP WINAPI CreateDIBSection(HDC hDC, CONST BITMAPINFO *BitmapInfo, UINT Usage, VOID **Bits, HANDLE hSection, DWORD dwOffset)
#define success(from, fromstr, to, tostr)
DWORD WINAPI GetLastError(void)
#define INVALID_FILE_SIZE
@ WICDecodeMetadataCacheOnLoad
WINBASEAPI _In_ DWORD _Out_ _In_ WORD wFlags
static HRESULT HRESULT_FROM_WIN32(unsigned int x)
#define DISP_E_BADPARAMCOUNT
#define DISP_E_MEMBERNOTFOUND
#define INET_E_RESOURCE_NOT_FOUND
#define DISP_E_TYPEMISMATCH
#define DISP_E_PARAMNOTOPTIONAL
#define DISP_E_UNKNOWNNAME
BOOL WINAPI DeleteMetaFile(_In_ HMETAFILE)
int WINAPI SetMapMode(_In_ HDC, _In_ int)
int WINAPI GetObjectW(_In_ HANDLE h, _In_ int c, _Out_writes_bytes_opt_(c) LPVOID pv)
HBITMAP WINAPI CreateBitmap(_In_ INT cx, _In_ INT cy, _In_ UINT cPlanes, _In_ UINT cBitsPerPel, _In_opt_ const VOID *pvBits)
struct tagBITMAPFILEHEADER BITMAPFILEHEADER
BOOL WINAPI DeleteEnhMetaFile(_In_opt_ HENHMETAFILE)
int WINAPI GetDeviceCaps(_In_opt_ HDC, _In_ int)
COLORREF WINAPI SetBkColor(_In_ HDC, _In_ COLORREF)
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)
BOOL WINAPI SetWindowOrgEx(_In_ HDC, _In_ int, _In_ int, _Out_opt_ LPPOINT)
BOOL WINAPI SetViewportExtEx(_In_ HDC, _In_ int, _In_ int, _Out_opt_ LPSIZE)
HGDIOBJ WINAPI GetCurrentObject(_In_ HDC, _In_ UINT)
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
BOOL WINAPI SetViewportOrgEx(_In_ HDC, _In_ int, _In_ int, _Out_opt_ LPPOINT)
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
BOOL WINAPI SetWindowExtEx(_In_ HDC, _In_ int, _In_ int, _Out_opt_ LPSIZE)
BOOL WINAPI StretchBlt(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_opt_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_ DWORD)
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)
COLORREF WINAPI SetTextColor(_In_ HDC, _In_ COLORREF)
UINT WINAPI GetEnhMetaFileHeader(_In_ HENHMETAFILE hemf, _In_ UINT nSize, _Out_writes_bytes_opt_(nSize) LPENHMETAHEADER lpEnhMetaHeader)
BOOL WINAPI DeleteDC(_In_ HDC)
HBITMAP WINAPI CreateDIBitmap(_In_ HDC hdc, _In_opt_ const BITMAPINFOHEADER *pbmih, _In_ DWORD fdwInit, _In_opt_ const VOID *pvInit, _In_opt_ const BITMAPINFO *pbmi, _In_ UINT uUsage)
BOOL WINAPI PlayMetaFile(_In_ HDC, _In_ HMETAFILE)
BOOL WINAPI PlayEnhMetaFile(_In_ HDC, _In_ HENHMETAFILE, _In_ LPCRECT)
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
BOOL WINAPI GetIconInfo(_In_ HICON, _Out_ PICONINFO)
HICON WINAPI CreateIconFromResourceEx(_In_reads_bytes_(dwResSize) PBYTE presbits, _In_ DWORD dwResSize, _In_ BOOL fIcon, _In_ DWORD dwVer, _In_ int cxDesired, _In_ int cyDesired, _In_ UINT Flags)
HDC WINAPI GetDC(_In_opt_ HWND)
BOOL WINAPI DestroyIcon(_In_ HICON)