WD_HCACHEDIMAGE wdCreateCachedImage(WD_HCANVAS hCanvas, WD_HIMAGE hImage) { if(d2d_enabled()) { d2d_canvas_t* c = (d2d_canvas_t*) hCanvas; ID2D1Bitmap* b; HRESULT hr; hr = ID2D1RenderTarget_CreateBitmapFromWicBitmap(c->target, (IWICBitmapSource*) hImage, NULL, &b); if(FAILED(hr)) { WD_TRACE_HR("wdCreateCachedImage: " "ID2D1RenderTarget::CreateBitmapFromWicBitmap() failed."); return NULL; } return (WD_HCACHEDIMAGE) b; } else { gdix_canvas_t* c = (gdix_canvas_t*) hCanvas; dummy_GpCachedBitmap* cb; int status; status = gdix_vtable->fn_CreateCachedBitmap((dummy_GpImage*) hImage, c->graphics, &cb); if(status != 0) { WD_TRACE("wdCreateCachedImage: " "GdipCreateCachedBitmap() failed. [%d]", status); return NULL; } return (WD_HCACHEDIMAGE) cb; } }
static HRESULT STDMETHODCALLTYPE d2d_dc_render_target_CreateBitmapFromWicBitmap(ID2D1DCRenderTarget *iface, IWICBitmapSource *bitmap_source, const D2D1_BITMAP_PROPERTIES *desc, ID2D1Bitmap **bitmap) { struct d2d_dc_render_target *render_target = impl_from_ID2D1DCRenderTarget(iface); TRACE("iface %p, bitmap_source %p, desc %p, bitmap %p.\n", iface, bitmap_source, desc, bitmap); return ID2D1RenderTarget_CreateBitmapFromWicBitmap(render_target->dxgi_target, bitmap_source, desc, bitmap); }