static void test_clipper(void) { IWICBitmapClipper *clipper; UINT height, width; IWICBitmap *bitmap; BYTE buffer[500]; WICRect rect; HRESULT hr; hr = IWICImagingFactory_CreateBitmap(factory, 10, 10, &GUID_WICPixelFormat24bppBGR, WICBitmapCacheOnLoad, &bitmap); ok(hr == S_OK, "got 0x%08x\n", hr); hr = IWICImagingFactory_CreateBitmapClipper(factory, &clipper); ok(hr == S_OK, "got 0x%08x\n", hr); rect.X = rect.Y = 0; rect.Width = rect.Height = 11; hr = IWICBitmapClipper_Initialize(clipper, (IWICBitmapSource*)bitmap, &rect); ok(hr == E_INVALIDARG, "got 0x%08x\n", hr); rect.X = rect.Y = 5; rect.Width = rect.Height = 6; hr = IWICBitmapClipper_Initialize(clipper, (IWICBitmapSource*)bitmap, &rect); ok(hr == E_INVALIDARG, "got 0x%08x\n", hr); rect.X = rect.Y = 5; rect.Width = rect.Height = 5; hr = IWICBitmapClipper_Initialize(clipper, (IWICBitmapSource*)bitmap, &rect); ok(hr == S_OK, "got 0x%08x\n", hr); width = height = 0; hr = IWICBitmapClipper_GetSize(clipper, &width, &height); ok(hr == S_OK, "got 0x%08x\n", hr); ok(width == 5, "got %d\n", width); ok(height == 5, "got %d\n", height); IWICBitmapClipper_Release(clipper); 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); }
HRESULT WINAPI IWICImagingFactory_CreateBitmapClipper_Proxy_W(IWICImagingFactory *pFactory, IWICBitmapClipper **ppIBitmapClipper) { return IWICImagingFactory_CreateBitmapClipper(pFactory, ppIBitmapClipper); }