95 *
ppv = &
This->IWICBitmapFrameDecode_iface;
112 TRACE(
"(%p) refcount=%lu\n", iface,
ref);
122 TRACE(
"(%p) refcount=%lu\n", iface,
ref);
138 *puiWidth =
This->width;
139 *puiHeight =
This->height;
141 TRACE(
"(%p) -> (%i,%i)\n", iface, *puiWidth, *puiHeight);
149 memcpy(pPixelFormat, &GUID_WICPixelFormat32bppBGRA,
sizeof(
GUID));
154 double *pDpiX,
double *pDpiY)
161 TRACE(
"(%p) -> (%f,%f)\n", iface, *pDpiX, *pDpiY);
169 TRACE(
"(%p,%p)\n", iface, pIPalette);
180 prc, cbStride, cbBufferSize, pbBuffer);
186 TRACE(
"(%p,%p)\n", iface, ppIMetadataQueryReader);
193 TRACE(
"(%p,%u,%p,%p)\n", iface, cCount, ppIColorContexts, pcActualCount);
200 TRACE(
"(%p,%p)\n", iface, ppIThumbnail);
201 return IWICBitmapFrameDecode_QueryInterface(iface, &IID_IWICBitmapSource, (
void **)ppIThumbnail);
220 if (transparent) *pixel = 0;
221 else *pixel |= 0xff000000;
242 hr = IWICBitmapDecoder_GetFrame(
decoder, 0, &framedecode);
246 hr = IWICBitmapFrameDecode_GetSize(framedecode, &
result->width, &
result->height);
255 hr = IWICBitmapFrameDecode_GetPixelFormat(framedecode, &
pixelformat);
261 IWICBitmapSource_AddRef(
source);
280 IWICBitmapSource_Release(
source);
284 hr = IWICBitmapFrameDecode_GetResolution(framedecode, &
result->dpiX, &
result->dpiY);
286 IWICBitmapFrameDecode_Release(framedecode);
292 int nonzero_alpha = 0;
316 UINT andBytesPerRow = (
result->width+31)/32*4;
317 UINT andBytes = andBytesPerRow *
result->height;
339 tempdata =
malloc(andBytes);
344 hr = IStream_Read(
stream, tempdata, andBytes, &bytesread);
350 andStride = andBytesPerRow;
355 andStride = -andBytesPerRow;
356 andRow = tempdata + (
result->height-1)*andBytesPerRow;
361 BYTE *andByte=andRow;
364 BYTE andVal=*andByte++;
375 bitsRow += bitsStride;
383 IWICBitmapDecoder_Release(
decoder);
403 hr = IWICBitmapDecoder_GetFrame(
decoder, 0, &sourceFrame);
409 hr = IWICBitmapFrameDecode_GetSize(sourceFrame, &
result->width, &
result->height);
412 hr = IWICBitmapFrameDecode_GetResolution(sourceFrame, &
result->dpiX, &
result->dpiY);
425 hr = IWICBitmapSource_CopyPixels(sourceBitmap, &
rect, 4*
result->width,
430 IWICBitmapDecoder_Release(
decoder);
431 if (sourceFrame !=
NULL)
432 IWICBitmapFrameDecode_Release(sourceFrame);
433 if (sourceBitmap !=
NULL)
434 IWICBitmapSource_Release(sourceBitmap);
449 *
ppv = &
This->IWICBitmapDecoder_iface;
466 TRACE(
"(%p) refcount=%lu\n", iface,
ref);
476 TRACE(
"(%p) refcount=%lu\n", iface,
ref);
480 This->lock.DebugInfo->Spare[0] = 0;
482 if (
This->stream) IStream_Release(
This->stream);
515 TRACE(
"(%p,%p,%x)\n", iface, pIStream, cacheOptions);
519 if (
This->initialized)
526 hr = IStream_Seek(pIStream,
seek, STREAM_SEEK_SET,
NULL);
538 if (
This->header.idReserved != 0 ||
539 This->header.idType != 1)
545 hr = IStream_Stat(pIStream, &statstg, STATFLAG_NONAME);
548 WARN(
"Stat() failed, hr %#lx.\n",
hr);
552 for (
i = 0;
i <
This->header.idCount;
i++)
556 hr = IStream_Read(pIStream, &direntry,
sizeof(direntry), &bytesread);
559 if (bytesread !=
sizeof(direntry) || (direntry.
dwDIBSize + direntry.
dwDIBOffset > statstg.cbSize.QuadPart))
567 This->stream = pIStream;
568 IStream_AddRef(pIStream);
578 GUID *pguidContainerFormat)
580 memcpy(pguidContainerFormat, &GUID_ContainerFormatIco,
sizeof(
GUID));
587 TRACE(
"(%p,%p)\n", iface, ppIDecoderInfo);
595 TRACE(
"(%p,%p)\n", iface, pIPalette);
602 TRACE(
"(%p,%p)\n", iface, ppIMetadataQueryReader);
609 TRACE(
"(%p,%p)\n", iface, ppIBitmapSource);
616 TRACE(
"(%p,%u,%p,%p)\n", iface, cCount, ppIColorContexts, pcActualCount);
623 TRACE(
"(%p,%p)\n", iface, ppIThumbnail);
635 *pCount =
This->initialized ?
This->header.idCount : 0;
638 TRACE(
"(%p) <-- %d\n", iface, *pCount);
655 TRACE(
"(%p,%u,%p)\n", iface,
index, ppIBitmapFrame);
659 if (!
This->initialized)
684 hr = IStream_Seek(
This->stream,
seek, STREAM_SEEK_SET, 0);
700 hr = IWICStream_Read(substream, &magic,
sizeof(magic), &bytesread);
701 if (
FAILED(
hr) || bytesread !=
sizeof(magic))
goto fail;
710 case sizeof(BITMAPV5HEADER):
717 FIXME(
"Unrecognized ICO frame magic: %lx\n", magic);
723 *ppIBitmapFrame = &
result->IWICBitmapFrameDecode_iface;
727 IWICStream_Release(substream);
734 if (substream) IWICStream_Release(substream);
778 This->lock.DebugInfo->Spare[0] = (
DWORD_PTR)(__FILE__
": IcoDecoder.lock");
780 ret = IWICBitmapDecoder_QueryInterface(&
This->IWICBitmapDecoder_iface, iid,
ppv);
781 IWICBitmapDecoder_Release(&
This->IWICBitmapDecoder_iface);
#define InterlockedIncrement
#define InterlockedDecrement
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
void BmpDecoder_GetWICDecoder(BmpDecoder *This, IWICBitmapDecoder **ppDecoder)
void BmpDecoder_FindIconMask(BmpDecoder *This, ULONG *mask_offset, int *topdown)
HRESULT IcoDibDecoder_CreateInstance(BmpDecoder **ppDecoder)
void copy_pixels(const BYTE *src, UINT src_row_pitch, UINT src_slice_pitch, BYTE *dst, UINT dst_row_pitch, UINT dst_slice_pitch, const struct volume *size, const struct pixel_format_desc *format) DECLSPEC_HIDDEN
static GpStatus get_decoder_info(IStream *stream, const struct image_codec **result)
BOOL WINAPI InitializeCriticalSectionEx(OUT LPCRITICAL_SECTION lpCriticalSection, IN DWORD dwSpinCount, IN DWORD flags)
HRESULT WINAPI WICConvertBitmapSource(REFWICPixelFormatGUID dstFormat, IWICBitmapSource *pISrc, IWICBitmapSource **ppIDst)
HRESULT StreamImpl_Create(IWICStream **stream)
GLint GLint GLint GLint GLint x
GLint GLint GLint GLint GLint GLint y
GLint GLint GLsizei width
GLuint GLsizei GLsizei * length
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
#define memcpy(s1, s2, n)
#define IsEqualGUID(rguid1, rguid2)
#define IsEqualIID(riid1, riid2)
int seek(void *fd, ulong off, int mode)
IWICBitmapDecoder IWICBitmapDecoder_iface
IWICBitmapFrameDecode IWICBitmapFrameDecode_iface
VOID WINAPI InitializeCriticalSection(OUT LPCRITICAL_SECTION lpCriticalSection)
#define CONTAINING_RECORD(address, type, field)
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
void WINAPI DeleteCriticalSection(PCRITICAL_SECTION)
@ WICDecodeMetadataCacheOnDemand
@ WICDecodeMetadataCacheOnLoad
@ WICBitmapDecoderCapabilityCanDecodeAllImages
static const char * debug_wic_rect(const WICRect *rect)
#define WINCODEC_ERR_WRONGSTATE
#define WINCODEC_ERR_UNSUPPORTEDOPERATION
#define WINCODEC_ERR_BADIMAGE
#define WINCODEC_ERR_PALETTEUNAVAILABLE
#define WINCODEC_ERR_CODECNOTHUMBNAIL
#define WINCODEC_ERR_FRAMEMISSING
#define WINCODEC_ERR_STREAMREAD
struct tagBITMAPCOREHEADER BITMAPCOREHEADER
#define RTL_CRITICAL_SECTION_FLAG_FORCE_DEBUG_INFO