Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
98be3669
Commit
98be3669
authored
Jul 22, 2013
by
Nikolay Sivov
Committed by
Alexandre Julliard
Jul 22, 2013
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
windowscodecs: Implement CopyPixels() for clipper.
parent
cbf51069
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
167 additions
and
2 deletions
+167
-2
clipper.c
dlls/windowscodecs/clipper.c
+26
-2
bitmap.c
dlls/windowscodecs/tests/bitmap.c
+141
-0
No files found.
dlls/windowscodecs/clipper.c
View file @
98be3669
...
@@ -165,8 +165,32 @@ static HRESULT WINAPI BitmapClipper_CopyPalette(IWICBitmapClipper *iface,
...
@@ -165,8 +165,32 @@ static HRESULT WINAPI BitmapClipper_CopyPalette(IWICBitmapClipper *iface,
static
HRESULT
WINAPI
BitmapClipper_CopyPixels
(
IWICBitmapClipper
*
iface
,
static
HRESULT
WINAPI
BitmapClipper_CopyPixels
(
IWICBitmapClipper
*
iface
,
const
WICRect
*
rc
,
UINT
stride
,
UINT
buffer_size
,
BYTE
*
buffer
)
const
WICRect
*
rc
,
UINT
stride
,
UINT
buffer_size
,
BYTE
*
buffer
)
{
{
FIXME
(
"(%p,%p,%u,%u,%p): stub
\n
"
,
iface
,
rc
,
stride
,
buffer_size
,
buffer
);
BitmapClipper
*
This
=
impl_from_IWICBitmapClipper
(
iface
);
return
E_NOTIMPL
;
WICRect
rect
;
TRACE
(
"(%p,%p,%u,%u,%p)
\n
"
,
iface
,
rc
,
stride
,
buffer_size
,
buffer
);
if
(
!
This
->
source
)
return
WINCODEC_ERR_WRONGSTATE
;
if
(
rc
)
{
rect
=
*
rc
;
/* transform to source coordinates */
rect
.
X
+=
This
->
rect
.
X
;
rect
.
Y
+=
This
->
rect
.
Y
;
if
((
rect
.
X
+
rect
.
Width
>
This
->
rect
.
X
+
This
->
rect
.
Width
)
||
(
rect
.
Y
+
rect
.
Height
>
This
->
rect
.
Y
+
This
->
rect
.
Height
))
return
E_INVALIDARG
;
rc
=
&
rect
;
}
else
rc
=
&
This
->
rect
;
return
IWICBitmapSource_CopyPixels
(
This
->
source
,
rc
,
stride
,
buffer_size
,
buffer
);
}
}
static
HRESULT
WINAPI
BitmapClipper_Initialize
(
IWICBitmapClipper
*
iface
,
static
HRESULT
WINAPI
BitmapClipper_Initialize
(
IWICBitmapClipper
*
iface
,
...
...
dlls/windowscodecs/tests/bitmap.c
View file @
98be3669
...
@@ -23,6 +23,7 @@
...
@@ -23,6 +23,7 @@
#include <math.h>
#include <math.h>
#define COBJMACROS
#define COBJMACROS
#define CONST_VTABLE
#include "windef.h"
#include "windef.h"
#include "objbase.h"
#include "objbase.h"
...
@@ -43,6 +44,80 @@ static const char *debugstr_guid(const GUID *guid)
...
@@ -43,6 +44,80 @@ static const char *debugstr_guid(const GUID *guid)
return
buf
;
return
buf
;
}
}
static
HRESULT
WINAPI
bitmapsource_QueryInterface
(
IWICBitmapSource
*
iface
,
REFIID
iid
,
void
**
ppv
)
{
if
(
IsEqualIID
(
&
IID_IUnknown
,
iid
)
||
IsEqualIID
(
&
IID_IWICBitmapSource
,
iid
))
{
*
ppv
=
iface
;
}
else
{
*
ppv
=
NULL
;
return
E_NOINTERFACE
;
}
return
S_OK
;
}
static
ULONG
WINAPI
bitmapsource_AddRef
(
IWICBitmapSource
*
iface
)
{
return
2
;
}
static
ULONG
WINAPI
bitmapsource_Release
(
IWICBitmapSource
*
iface
)
{
return
1
;
}
static
HRESULT
WINAPI
bitmapsource_GetSize
(
IWICBitmapSource
*
iface
,
UINT
*
width
,
UINT
*
height
)
{
*
width
=
*
height
=
10
;
return
S_OK
;
}
static
HRESULT
WINAPI
bitmapsource_GetPixelFormat
(
IWICBitmapSource
*
iface
,
WICPixelFormatGUID
*
format
)
{
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
bitmapsource_GetResolution
(
IWICBitmapSource
*
iface
,
double
*
dpiX
,
double
*
dpiY
)
{
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
bitmapsource_CopyPalette
(
IWICBitmapSource
*
iface
,
IWICPalette
*
palette
)
{
return
E_NOTIMPL
;
}
static
WICRect
g_rect
;
static
BOOL
called_CopyPixels
;
static
HRESULT
WINAPI
bitmapsource_CopyPixels
(
IWICBitmapSource
*
iface
,
const
WICRect
*
rc
,
UINT
stride
,
UINT
buffer_size
,
BYTE
*
buffer
)
{
if
(
rc
)
g_rect
=
*
rc
;
called_CopyPixels
=
TRUE
;
return
S_OK
;
}
static
const
IWICBitmapSourceVtbl
sourcevtbl
=
{
bitmapsource_QueryInterface
,
bitmapsource_AddRef
,
bitmapsource_Release
,
bitmapsource_GetSize
,
bitmapsource_GetPixelFormat
,
bitmapsource_GetResolution
,
bitmapsource_CopyPalette
,
bitmapsource_CopyPixels
};
static
IWICBitmapSource
bitmapsource
=
{
&
sourcevtbl
};
static
HBITMAP
create_dib
(
int
width
,
int
height
,
int
bpp
,
LOGPALETTE
*
pal
,
const
void
*
data
)
static
HBITMAP
create_dib
(
int
width
,
int
height
,
int
bpp
,
LOGPALETTE
*
pal
,
const
void
*
data
)
{
{
char
bmibuf
[
sizeof
(
BITMAPINFO
)
+
sizeof
(
RGBQUAD
)
*
255
];
char
bmibuf
[
sizeof
(
BITMAPINFO
)
+
sizeof
(
RGBQUAD
)
*
255
];
...
@@ -774,6 +849,7 @@ static void test_clipper(void)
...
@@ -774,6 +849,7 @@ static void test_clipper(void)
IWICBitmapClipper
*
clipper
;
IWICBitmapClipper
*
clipper
;
UINT
height
,
width
;
UINT
height
,
width
;
IWICBitmap
*
bitmap
;
IWICBitmap
*
bitmap
;
BYTE
buffer
[
500
];
WICRect
rect
;
WICRect
rect
;
HRESULT
hr
;
HRESULT
hr
;
...
@@ -807,6 +883,71 @@ static void test_clipper(void)
...
@@ -807,6 +883,71 @@ static void test_clipper(void)
IWICBitmapClipper_Release
(
clipper
);
IWICBitmapClipper_Release
(
clipper
);
IWICBitmap_Release
(
bitmap
);
IWICBitmap_Release
(
bitmap
);
/* CopyPixels */
hr
=
IWICImagingFactory_CreateBitmapClipper
(
factory
,
&
clipper
);
ok
(
hr
==
S_OK
,
"got 0x%08x
\n
"
,
hr
);
rect
.
X
=
rect
.
Y
=
5
;
rect
.
Width
=
rect
.
Height
=
5
;
hr
=
IWICBitmapClipper_Initialize
(
clipper
,
&
bitmapsource
,
&
rect
);
ok
(
hr
==
S_OK
,
"got 0x%08x
\n
"
,
hr
);
rect
.
X
=
rect
.
Y
=
0
;
rect
.
Width
=
rect
.
Height
=
2
;
/* passed rectangle is relative to clipper rectangle, underlying source gets intersected
rectangle */
memset
(
&
g_rect
,
0
,
sizeof
(
g_rect
));
called_CopyPixels
=
FALSE
;
hr
=
IWICBitmapClipper_CopyPixels
(
clipper
,
&
rect
,
0
,
sizeof
(
buffer
),
buffer
);
ok
(
hr
==
S_OK
,
"got 0x%08x
\n
"
,
hr
);
ok
(
called_CopyPixels
,
"CopyPixels not called
\n
"
);
ok
(
g_rect
.
X
==
5
&&
g_rect
.
Y
==
5
&&
g_rect
.
Width
==
2
&&
g_rect
.
Height
==
2
,
"got wrong rectangle (%d,%d)-(%d,%d)
\n
"
,
g_rect
.
X
,
g_rect
.
Y
,
g_rect
.
Width
,
g_rect
.
Height
);
/* whole clipping rectangle */
memset
(
&
g_rect
,
0
,
sizeof
(
g_rect
));
called_CopyPixels
=
FALSE
;
rect
.
X
=
rect
.
Y
=
0
;
rect
.
Width
=
rect
.
Height
=
5
;
hr
=
IWICBitmapClipper_CopyPixels
(
clipper
,
&
rect
,
0
,
sizeof
(
buffer
),
buffer
);
ok
(
hr
==
S_OK
,
"got 0x%08x
\n
"
,
hr
);
ok
(
called_CopyPixels
,
"CopyPixels not called
\n
"
);
ok
(
g_rect
.
X
==
5
&&
g_rect
.
Y
==
5
&&
g_rect
.
Width
==
5
&&
g_rect
.
Height
==
5
,
"got wrong rectangle (%d,%d)-(%d,%d)
\n
"
,
g_rect
.
X
,
g_rect
.
Y
,
g_rect
.
Width
,
g_rect
.
Height
);
/* larger than clipping rectangle */
memset
(
&
g_rect
,
0
,
sizeof
(
g_rect
));
called_CopyPixels
=
FALSE
;
rect
.
X
=
rect
.
Y
=
0
;
rect
.
Width
=
rect
.
Height
=
20
;
hr
=
IWICBitmapClipper_CopyPixels
(
clipper
,
&
rect
,
0
,
sizeof
(
buffer
),
buffer
);
ok
(
hr
==
E_INVALIDARG
,
"got 0x%08x
\n
"
,
hr
);
ok
(
!
called_CopyPixels
,
"CopyPixels called
\n
"
);
rect
.
X
=
rect
.
Y
=
5
;
rect
.
Width
=
rect
.
Height
=
5
;
hr
=
IWICBitmapClipper_CopyPixels
(
clipper
,
&
rect
,
0
,
sizeof
(
buffer
),
buffer
);
ok
(
hr
==
E_INVALIDARG
,
"got 0x%08x
\n
"
,
hr
);
ok
(
!
called_CopyPixels
,
"CopyPixels called
\n
"
);
/* null rectangle */
memset
(
&
g_rect
,
0
,
sizeof
(
g_rect
));
called_CopyPixels
=
FALSE
;
hr
=
IWICBitmapClipper_CopyPixels
(
clipper
,
NULL
,
0
,
sizeof
(
buffer
),
buffer
);
ok
(
hr
==
S_OK
,
"got 0x%08x
\n
"
,
hr
);
ok
(
called_CopyPixels
,
"CopyPixels not called
\n
"
);
ok
(
g_rect
.
X
==
5
&&
g_rect
.
Y
==
5
&&
g_rect
.
Width
==
5
&&
g_rect
.
Height
==
5
,
"got wrong rectangle (%d,%d)-(%d,%d)
\n
"
,
g_rect
.
X
,
g_rect
.
Y
,
g_rect
.
Width
,
g_rect
.
Height
);
IWICBitmapClipper_Release
(
clipper
);
}
}
START_TEST
(
bitmap
)
START_TEST
(
bitmap
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment