Watermark2.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 System.Numerics;using GrapeCity.Documents.Text;using GrapeCity.Documents.Imaging;using GCTEXT = GrapeCity.Documents.Text;
namespace DsImagingWeb.Demos{ // This sample demonstrates how to render a watermark on an image // at an angle using a rotation transformation on the bitmap graphics. public class Watermark2 { public GcBitmap GenerateImage(Size pixelSize, float dpi, bool opaque, string[] sampleParams = null) { // Note: we can use Color.Transparent instead of a solid background, // but the resulting image format must support transparency for this // to work as expected: var backColor = Color.FromArgb(unchecked((int)0xff0066cc)); var foreColor = Color.FromArgb(unchecked((int)0xffffcc00)); float angle = -30; var rad = (float)(angle * Math.PI) / 180f;
var bmp = new GcBitmap(pixelSize.Width, pixelSize.Height, opaque, dpi, dpi); using (var bmpSrc = new GcBitmap(Path.Combine("Resources", "ImagesBis", "alpamayo-sq.jpg"))) { // BitBlt requires the opacity of both images to be the same: bmpSrc.Opaque = opaque; // Render source image onto the target bitmap // (generally we might want to resize the source image first, // but in this case we just know that the source image has // the same size as the target, so skip this step): bmp.BitBlt(bmpSrc, 0, 0); }
using (var g = bmp.CreateGraphics()) { // Draw watermark text in a loop over all image at an angle: g.Transform = Matrix3x2.CreateRotation((float)(angle * Math.PI) / 180f, new Vector2(pixelSize.Width / 2, pixelSize.Height / 2)); var tf = new TextFormat() { Font = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "FreeSansBold.ttf")), FontSize = 14, ForeColor = Color.FromArgb(64, Color.White),
}; var tl = g.CreateTextLayout(); tl.Append("Copyright (c) MESCIUS", tf); tl.PerformLayout(true); int dx = (int)tl.ContentWidth * 3; int dy = (int)tl.ContentHeight * 5; int n = 0; int offX = -(int)(Math.Cos(rad) * pixelSize.Height / 2); ; int offY = (int)(Math.Sin(rad) * pixelSize.Width / 2); for (float y = offY; y < pixelSize.Height - offY; y += dy, ++n) for (float x = offX + dx / 2 * (n % 2); x < pixelSize.Width - offX; x += dx) g.DrawTextLayout(tl, new PointF(x, y)); } return bmp; } }}