2 * Copyright 2009 Vincent Povirk for CodeWeavers
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
29 #include "wincodecs_private.h"
31 #include "wine/debug.h"
33 WINE_DEFAULT_DEBUG_CHANNEL(wincodecs
);
35 BOOL WINAPI
DllMain(HINSTANCE hinstDLL
, DWORD fdwReason
, LPVOID lpvReserved
)
40 case DLL_WINE_PREATTACH
:
41 return FALSE
; /* prefer native version */
42 case DLL_PROCESS_ATTACH
:
43 DisableThreadLibraryCalls(hinstDLL
);
45 case DLL_PROCESS_DETACH
:
52 HRESULT
copy_pixels(UINT bpp
, const BYTE
*srcbuffer
,
53 UINT srcwidth
, UINT srcheight
, INT srcstride
,
54 const WICRect
*rc
, UINT dststride
, UINT dstbuffersize
, BYTE
*dstbuffer
)
57 UINT row_offset
; /* number of bits into the source rows where the data starts */
59 if (rc
->X
< 0 || rc
->Y
< 0 || rc
->X
+rc
->Width
> srcwidth
|| rc
->Y
+rc
->Height
> srcheight
)
62 bytesperrow
= ((bpp
* rc
->Width
)+7)/8;
64 if (dststride
< bytesperrow
)
67 if ((dststride
* rc
->Height
) > dstbuffersize
)
70 row_offset
= rc
->X
* bpp
;
72 if (row_offset
% 8 == 0)
74 /* everything lines up on a byte boundary */
79 src
= srcbuffer
+ (row_offset
/ 8) + srcstride
* rc
->Y
;
81 for (row
=0; row
< rc
->Height
; row
++)
83 memcpy(dst
, src
, bytesperrow
);
91 /* we have to do a weird bitwise copy. eww. */
92 FIXME("cannot reliably copy bitmap data if bpp < 8\n");