/// <summary> /// Renders the <see cref="PresentationImage"/> to a provided offscreen <see cref="Bitmap"/>. /// </summary> /// <param name="bmp">The offscreen bitmap to render to.</param> /// <returns></returns> /// <remarks> /// This method can be used anywhere an offscreen bitmap is required, such as /// paper/DICOM printing, thumbnail generation, creation of new DICOM images, etc. /// </remarks> /// <exception cref="ArgumentNullException">Thrown if <paramref name="bmp"/> is null.</exception> /// <exception cref="ArgumentException">Thrown if <paramref name="bmp"/> has invalid dimensions.</exception> /// <exception cref="RenderingException">Thrown if any <see cref="Exception"/> is encountered while rendering the image.</exception> public virtual void DrawToBitmap(Bitmap bmp) { Platform.CheckForNullReference(bmp, "bmp"); Platform.CheckPositive(bmp.Width, "bmp.Width"); Platform.CheckPositive(bmp.Height, "bmp.Height"); var graphics = System.Drawing.Graphics.FromImage(bmp); var contextId = graphics.GetHdc(); try { using (var surface = ImageRenderer.CreateRenderingSurface(IntPtr.Zero, bmp.Width, bmp.Height, RenderingSurfaceType.Offscreen)) { surface.ContextID = contextId; surface.ClipRectangle = new Rectangle(0, 0, bmp.Width, bmp.Height); var drawArgs = new DrawArgs(surface, null, DrawMode.Render) { Tag = bmp }; DrawNoEvents(drawArgs); drawArgs = new DrawArgs(surface, null, DrawMode.Refresh) { Tag = bmp }; DrawNoEvents(drawArgs); } } finally { graphics.ReleaseHdc(contextId); graphics.Dispose(); } }