Blend modes are used in computer graphics to determine how colors are blended, or mixed, with each other when drawing on a surface that already contains color information. In other words, a blend mode determines the resulting color of a colored pixel when another color is applied to it. The default is BlendMode.Normal, which simply replaces the original color with the new one.
The GcPdfGraphics class supports blend modes by providing PDF-specific overrides of its base GcGraphics class's abstract members:
The below image shows different blend modes applied to two images in a PDF document:
To apply blend modes:
C# |
Copy Code
|
---|---|
var doc = new GcPdfDocument(); var page = doc.NewPage(); var g = page.Graphics; var iorchid = Image.FromFile(Path.Combine("Resources", "ImagesBis", "orchid.jpg")); var ispectr = Image.FromFile(Path.Combine("Resources", "ImagesBis", "spectrum-pastel-500x500.png")); const int margin = 36; const int NCOLS = 4; var w = (int)((page.Size.Width - margin * 2) / NCOLS); var h = (int)((iorchid.Height * w) / iorchid.Width); // Text layout for captions: var tl = g.CreateTextLayout(); tl.DefaultFormat.Font = Font.FromFile(Path.Combine("Resources", "Fonts", "cour.ttf")); tl.DefaultFormat.FontSize = 12; tl.ParagraphAlignment = ParagraphAlignment.Center; tl.TextAlignment = TextAlignment.Center; tl.MaxWidth = w; tl.MaxHeight = h; tl.MarginTop = h - g.MeasureString("QWERTY", tl.DefaultFormat).Height * 1.4f; int row = 0, col; // Render all blending modes in a grid: var modes = Enum.GetValues(typeof(BlendMode)); for (int i = 0; i < 2; ++i) { row = col = 0; Image iback, ifore; if (i == 0) { iback = ispectr; ifore = iorchid; } else // i == 1 { iback = iorchid; ifore = ispectr; page = doc.Pages.Add(); g = page.Graphics; } foreach (var mode in modes) { var blendMode = (BlendMode)mode; if (!g.IsBlendModeSupported(blendMode)) continue; int x = margin + w * col; int y = margin + h * row; var r = new RectangleF(x, y, w, h); g.BlendMode = BlendMode.Normal; g.DrawImage(iback, r, null, ImageAlign.StretchImage); g.BlendMode = blendMode; g.DrawImage(ifore, r, null, ImageAlign.StretchImage); g.BlendMode = BlendMode.Normal; // Caption: tl.Clear(); tl.Append(blendMode.ToString()); tl.PerformLayout(true); var rc = tl.ContentRectangle; rc.Offset(x, y); rc.Inflate(4, 2); g.FillRectangle(rc, Color.White); g.DrawTextLayout(tl, new PointF(x, y)); nextRowCol(); } } doc.Save(stream); // void nextRowCol() { if (++col == NCOLS) { col = 0; ++row; } } |
Limitation
The Hue, Saturation, Color, and Luminosity blend modes are not supported in DsPdf as they are not supported in the PDF specification.