//// This code is part of Document Solutions for Imaging demos.// Copyright (c) MESCIUS inc. All rights reserved.//usingSystem;usingSystem.IO;usingSystem.Drawing;usingSystem.Numerics;usingGrapeCity.Documents.Text;usingGrapeCity.Documents.Imaging;usingGCTEXT = GrapeCity.Documents.Text; namespaceDsImagingWeb.Demos{// This sample demonstrates how to render a watermark on an image// at an angle using a rotation transformation on the bitmap graphics.publicclassWatermark2 {publicGcBitmapGenerateImage(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 = newGcBitmap(pixelSize.Width, pixelSize.Height, opaque, dpi, dpi);using (var bmpSrc = newGcBitmap(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, newVector2(pixelSize.Width / 2, pixelSize.Height / 2));var tf = newTextFormat() {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, newPointF(x, y)); }return bmp; } }}