BackgroundBitmap.cs
C# VB
//// This code is part of Document Solutions for Imaging demos.// Copyright (c) MESCIUS inc. All rights reserved.//using System.IO;using System.Drawing;using GrapeCity.Documents.Drawing;using GrapeCity.Documents.Text;using GrapeCity.Documents.Imaging;using GCTEXT = GrapeCity.Documents.Text;using GCDRAW = GrapeCity.Documents.Drawing;
namespace DsImagingWeb.Demos{ // This sample demonstrates the use of BitmapRenderer.BackgroundBitmap // when drawing on a bitmap. // // When drawing semi-transparent graphic objects, usually the resulting color // of a pixel is a combination of the target bitmap pixel's color and the color // of the graphic object's pixel. But if the BackgroundBitmap is set on the // BitmapRenderer, pixels of that bitmap will be used instead of the target // bitmap's pixels when determining the resulting color. Background bitmaps // are used to support Isolated and Knockout transparency groups (as defined // in the PDF specification 1.7 sections 7.3.4 and 7.3.5) when rendering PDFs // to images. public class BackgroundBitmap { public GcBitmap GenerateImage(Size pixelSize, float dpi, bool _, string[] _1 = null) { var hx = pixelSize.Width / 2; var hy = pixelSize.Height / 2;
// The spectrum image used for the backdrop: using var bmp0 = new GcBitmap(Path.Combine("Resources", "ImagesBis", "spectrum-pastel-500x500.png")); using var bmp1 = bmp0.Resize(hx, hy, InterpolationMode.Cubic);
using var bmpBackdrop = new GcBitmap(hx, hy, false, dpi, dpi); using var bmpInitial = new GcBitmap(hx, hy, false, dpi, dpi); using var gB = bmpBackdrop.CreateGraphics(); using var gI = bmpInitial.CreateGraphics();
gB.Renderer.Aliased = true; gB.Renderer.BlendMode = BlendMode.Multiply; gI.Renderer.Aliased = true; gI.Renderer.BlendMode = BlendMode.Multiply;
// The target bitmap will contain 4 demo quadrants: var bmp = new GcBitmap(pixelSize.Width, pixelSize.Height, false, dpi, dpi);
// Isolated, Knockout: bmpBackdrop.BitBlt(bmp1, 0, 0); bmpInitial.Clear(Color.Transparent); gB.Renderer.BackgroundBitmap = bmpInitial; FillCircles(gB, hx, hy); bmp.BitBlt(bmpBackdrop, 0, 0);
// Isolated, Non-knockout: FillCircles(gI, hx, hy); bmpBackdrop.BitBlt(bmp1, 0, 0); bmpBackdrop.AlphaBlend(bmpInitial, 0, 0); bmp.BitBlt(bmpBackdrop, hx, 0);
// Non-isolated, Knockout: bmpBackdrop.BitBlt(bmp1, 0, 0); bmpInitial.BitBlt(bmp1, 0, 0); FillCircles(gB, hx, hy); bmp.BitBlt(bmpBackdrop, 0, hy);
// Non-isolated, Non-knockout: bmpBackdrop.BitBlt(bmp1, 0, 0); gB.Renderer.BackgroundBitmap = null; FillCircles(gB, hx, hy); bmp.BitBlt(bmpBackdrop, hx, hy);
// Adornments: using var g = bmp.CreateGraphics(); g.DrawLine(0, hy, bmp.PixelWidth, hy, new GCDRAW.Pen(Color.Black)); g.DrawLine(hx, 0, hx, bmp.PixelHeight, new GCDRAW.Pen(Color.Black)); var tf = new TextFormat() { Font = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "FreeMonoBold.ttf")), FontSize = 16, }; var d = 40; g.DrawString("Isolated, Knockout", tf, new RectangleF(0, hy - d, hx, d), TextAlignment.Center, ParagraphAlignment.Center, false); g.DrawString("Isolated, Non-knockout", tf, new RectangleF(hx, hy - d, hx, d), TextAlignment.Center, ParagraphAlignment.Center, false); g.DrawString("Non-isolated, Knockout", tf, new RectangleF(0, hy * 2 - d, hx, d), TextAlignment.Center, ParagraphAlignment.Center, false); g.DrawString("Non-isolated, Non-knockout", tf, new RectangleF(hx, hy * 2 - d, hx, d), TextAlignment.Center, ParagraphAlignment.Center, false);
// Done: return bmp; }
void FillCircles(GcBitmapGraphics g, float hx, float hy) { var dx = hx / 10; var dy = hy / 10; var qx = hx / 2; var qy = hy / 2;
g.FillEllipse(new RectangleF(dx, dy, qx, qy), Color.LightGray); g.FillEllipse(new RectangleF(qx - dx, dy, qx, qy), Color.LightGray); g.FillEllipse(new RectangleF(dx, qy - dy, qx, qy), Color.LightGray); g.FillEllipse(new RectangleF(qx - dx, qy - dy, qx, qy), Color.LightGray); } }}