SharpDX: Render to bitmap using Direct2D 1.1
- by mwhouser
I have a command line application that I am currently using SharpDX (Direct2D 1.0) to render to PNG files. This is a window-less application.
It's currently creating a SharpDX.WIC.WicBitmap, a WicRenderTarget, then rendering to that. I then save the WicBitmap to the PNG file.
For various reasons, I need to migrate to Direct2D 1.1 to take advantage of some of the effects available in 1.1.
I'm trying to get a SharpDX.Direct2D1.Bitmap that I can save as PNG.
I cannot use FromWicBitmap because that copies the bitmap, it does not share it.
I see CreateSharedBitmap in the Direct2D1 API that takes a IWICBitmapLock. However, I do not see this implemented as a constructor of SharpDX.Direct2D.Bitmap.
This is what I'm trying to do:
// Bunch of setup
var d2dDevice = new SharpDX.Direct2D1.Device(dxgiDevice);
var d2dDeviceContext = new SharpDX.Direct2D1.DeviceContext(d2dDevice,
SharpDX.Direct2D1.DeviceContextOptions.None);
using (var wicFactory = new SharpDX.WIC.ImagingFactory())
{
using (SharpDX.WIC.Bitmap wicBitmap =
new SharpDX.WIC.Bitmap(wicFactory, 500, 500,
SharpDX.WIC.PixelFormat.Format32bppPBGRA,
SharpDX.WIC.BitmapCreateCacheOption.CacheOnDemand))
{
var wicLock = wicBitmap.Lock(SharpDX.WIC.BitmapLockFlags.Write);
var props = new SharpDX.Direct2D1.BitmapProperties1();
props.BitmapOptions = SharpDX.Direct2D1.BitmapOptions.Target;
var bitmap = new SharpDX.Direct2D1.Bitmap1(d2dDeviceContext, wicLock, props); // This is not available
d2dDeviceContext.Target = bitmap;
// Do the drawing
// Save the PNG
}
}
Is there a way to do what I'm trying to accomplish?