From: Dmitry Timoshkov dmitry@baikal.ru
Signed-off-by: Dmitry Timoshkov dmitry@baikal.ru --- dlls/windowscodecs/fliprotate.c | 31 +++++++++++++++++-------------- dlls/windowscodecs/tests/bitmap.c | 11 ++++------- 2 files changed, 21 insertions(+), 21 deletions(-)
diff --git a/dlls/windowscodecs/fliprotate.c b/dlls/windowscodecs/fliprotate.c index 9eb8b971f21..35cfde34280 100644 --- a/dlls/windowscodecs/fliprotate.c +++ b/dlls/windowscodecs/fliprotate.c @@ -191,34 +191,27 @@ static HRESULT WINAPI FlipRotator_CopyPixels(IWICBitmapFlipRotator *iface, return E_NOTIMPL; }
- if (This->swap_xy) - { - FIXME("Rotating is not implemented\n"); - return E_NOTIMPL; - } - for (y = prc->Y; y - prc->Y < prc->Height; y++) { BYTE *dst = pbBuffer;
if (This->flip_y) - srcy = srcheight - 1 - y; + srcy = height - 1 - y; else srcy = y;
for (x = prc->X; x - prc->X < prc->Width; x++) { if (This->flip_x) - srcx = srcwidth - 1 - x; + srcx = width - 1 - x; else srcx = x;
- rc.X = srcx; - rc.Y = srcy; + rc.X = This->swap_xy ? srcy : srcx; + rc.Y = This->swap_xy ? srcx : srcy; rc.Width = 1; rc.Height = 1; - - hr = IWICBitmapSource_CopyPixels(This->source, &rc, cbStride, cbStride, dst); + hr = IWICBitmapSource_CopyPixels(This->source, &rc, bytes_per_pixel, bytes_per_pixel, dst); if (FAILED(hr)) return hr;
dst += bytes_per_pixel; @@ -283,10 +276,20 @@ static HRESULT WINAPI FlipRotator_Initialize(IWICBitmapFlipRotator *iface, }
if (options&WICBitmapTransformFlipHorizontal) - This->flip_x = !This->flip_x; + { + if (This->swap_xy) + This->flip_y = !This->flip_y; + else + This->flip_x = !This->flip_x; + }
if (options&WICBitmapTransformFlipVertical) - This->flip_y = !This->flip_y; + { + if (This->swap_xy) + This->flip_x = !This->flip_x; + else + This->flip_y = !This->flip_y; + }
hr = IWICBitmapSource_GetPixelFormat(pISource, &pf); if (SUCCEEDED(hr)) diff --git a/dlls/windowscodecs/tests/bitmap.c b/dlls/windowscodecs/tests/bitmap.c index bc4851c13c0..b409732f022 100644 --- a/dlls/windowscodecs/tests/bitmap.c +++ b/dlls/windowscodecs/tests/bitmap.c @@ -1495,14 +1495,13 @@ static void test_FlipRotator(void) WICBitmapTransformOptions options; UINT dst_width, dst_height; const BYTE *dst_data; - BOOL todo; } td[] = { { WICBitmapTransformRotate0, 3, 2, src_data }, - { WICBitmapTransformRotate90, 2, 3, dst_data_rotate90, TRUE }, - { WICBitmapTransformRotate90 | WICBitmapTransformFlipHorizontal, 2, 3, dst_data_rotate90_flip_h, TRUE }, - { WICBitmapTransformRotate90 | WICBitmapTransformFlipVertical, 2, 3, dst_data_rotate90_flip_v, TRUE }, - { WICBitmapTransformRotate90 | WICBitmapTransformFlipHorizontal | WICBitmapTransformFlipVertical, 2, 3, dst_data_rotate90_flip_hv, TRUE }, + { WICBitmapTransformRotate90, 2, 3, dst_data_rotate90 }, + { WICBitmapTransformRotate90 | WICBitmapTransformFlipHorizontal, 2, 3, dst_data_rotate90_flip_h }, + { WICBitmapTransformRotate90 | WICBitmapTransformFlipVertical, 2, 3, dst_data_rotate90_flip_v }, + { WICBitmapTransformRotate90 | WICBitmapTransformFlipHorizontal | WICBitmapTransformFlipVertical, 2, 3, dst_data_rotate90_flip_hv }, { WICBitmapTransformRotate180, 3, 2, dst_data_rotate180 }, { WICBitmapTransformRotate180 | WICBitmapTransformFlipHorizontal, 3, 2, dst_data_rotate180_flip_h }, { WICBitmapTransformRotate180 | WICBitmapTransformFlipVertical, 3, 2, dst_data_rotate180_flip_v }, @@ -1557,10 +1556,8 @@ static void test_FlipRotator(void) rc.Height = height; memset(buf, 0, sizeof(buf)); hr = IWICBitmapFlipRotator_CopyPixels(fr, &rc, width, sizeof(buf), buf); - todo_wine_if(td[i].todo) ok(hr == S_OK, "got %#lx\n", hr); ret = !memcmp(buf, td[i].dst_data, sizeof(src_data)); - todo_wine_if(td[i].todo) ok(ret, "data mismatch\n"); if (!ret && winetest_debug > 1) {