static HRESULT WINAPI BmpFrameDecode_CopyPixels(IWICBitmapFrameDecode *iface, const WICRect *prc, UINT cbStride, UINT cbBufferSize, BYTE *pbBuffer) { BmpFrameDecode *This = (BmpFrameDecode*)iface; HRESULT hr; UINT width, height; TRACE("(%p,%p,%u,%u,%p)\n", iface, prc, cbStride, cbBufferSize, pbBuffer); if (!This->imagedata) { hr = This->read_data_func(This); if (FAILED(hr)) return hr; } hr = BmpFrameDecode_GetSize(iface, &width, &height); if (FAILED(hr)) return hr; return copy_pixels(This->bitsperpixel, This->imagedatastart, width, height, This->stride, prc, cbStride, cbBufferSize, pbBuffer); }
static HRESULT WINAPI BmpFrameDecode_CopyPixels(IWICBitmapFrameDecode *iface, const WICRect *prc, UINT cbStride, UINT cbBufferSize, BYTE *pbBuffer) { BmpDecoder *This = impl_from_IWICBitmapFrameDecode(iface); HRESULT hr=S_OK; UINT width, height; TRACE("(%p,%p,%u,%u,%p)\n", iface, prc, cbStride, cbBufferSize, pbBuffer); EnterCriticalSection(&This->lock); if (!This->imagedata) { hr = This->read_data_func(This); } LeaveCriticalSection(&This->lock); if (FAILED(hr)) return hr; hr = BmpFrameDecode_GetSize(iface, &width, &height); if (FAILED(hr)) return hr; return copy_pixels(This->bitsperpixel, This->imagedatastart, width, height, This->stride, prc, cbStride, cbBufferSize, pbBuffer); }