BlendText.cs
C# VB
//// This code is part of Document Solutions for Imaging demos.// Copyright (c) MESCIUS inc. All rights reserved.//using System;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 effects of different blend modes // when drawing on a GcGraphics. Note that the current blend mode // set on an instance of GcGraphics (including GcBitmapGraphics) // affects not only images but all drawing operations. // See also BlendImages_0 and BlendingModes samples. public class BlendText { public GcBitmap GenerateImage(Size pixelSize, float dpi, bool opaque, string[] _ = null) { var ispectr = GCDRAW.Image.FromFile(Path.Combine("Resources", "ImagesBis", "spectrum-500x500.png")); const int margin = 36; const int NCOLS = 4; var w = (int)((pixelSize.Width - margin * 2) / NCOLS); var h = w / 2; int row = 0, col = 0; float bottomy = 0;
var bmp = new GcBitmap(pixelSize.Width, pixelSize.Height, opaque, dpi, dpi); using (var g = bmp.CreateGraphics(Color.White)) { // Text layout for captions: var tl = g.CreateTextLayout(); tl.DefaultFormat.Font = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "FreeMonoBold.ttf")); tl.DefaultFormat.FontSize = 22; tl.ParagraphAlignment = ParagraphAlignment.Center; tl.TextAlignment = TextAlignment.Center; tl.MaxWidth = w; tl.MaxHeight = h; tl.MarginTop = (h - h / 1.4f) / 2; tl.DefaultFormat.ForeColor = Color.Black; var tfWhite = new TextFormat(tl.DefaultFormat) { ForeColor = Color.White };
// Render all blend modes in a grid: var modes = Enum.GetValues(typeof(BlendMode)); 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);
// Draw spectrum image normally: g.BlendMode = BlendMode.Normal; g.DrawImage(ispectr, r, null, ImageAlign.StretchImage); // Draw blend mode name using the current blend mode: tl.Clear(); tl.AppendLine($"B: {blendMode}"); tl.Append($"W: {blendMode}", tfWhite); tl.PerformLayout(true); var rc = tl.ContentRectangle; rc.Offset(x, y); rc.Inflate(4, 2); // Current blend mode: g.BlendMode = blendMode; g.DrawTextLayout(tl, new PointF(x, y)); // Draw spectrum image again using BlendMode.Difference // to produce (mostly) colorful text on black background: g.BlendMode = BlendMode.Difference; g.DrawImage(ispectr, r, null, ImageAlign.StretchImage); // Draw a rectangle to mark the current area: g.BlendMode = BlendMode.Normal; g.DrawRectangle(r, Color.Gray); bottomy = r.Bottom; if (++col == NCOLS) { col = 0; ++row; } } // For reference, draw the backdrop: tl.Clear(); tl.MarginAll = 0; tl.MaxWidth = bmp.PixelWidth; tl.MaxHeight = null; tl.DefaultFormat.FontSize = 14; tl.TextAlignment = TextAlignment.Leading; tl.ParagraphAlignment = ParagraphAlignment.Near; tl.Append("The spectrum image used as the backdrop for the texts above:"); g.DrawTextLayout(tl, new PointF(margin, bottomy + margin)); g.DrawImage(ispectr, new RectangleF(margin, bottomy + margin + tl.ContentHeight + 24, w, w), null, ImageAlign.StretchImage); } return bmp; } }}