//
// 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.Collections.Generic;
using System.Linq;
using System.Numerics;
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 TransparencyMaskBitmap
// when drawing on a bitmap. The transparency mask used is
// created on the fly by filling an intermediary bitmap
// with a linear gradient brush from 0 (black, transparent)
// to 255 (white, opaque).
public class TransparencyMask
{
public GcBitmap GenerateImage(Size pixelSize, float dpi, bool opaque, string[] sampleParams = null)
{
var h2 = pixelSize.Width / 2;
// Prepare a linear gradient transparency mask,
// from 0 (transparent) to 255 (opaque):
using var mask = new GcBitmap(h2, h2, true);
using var gmask = mask.CreateGraphics();
var grad = new LinearGradientBrush(Color.Black, Color.White);
gmask.FillRectangle(new RectangleF(0, 0, mask.Width, mask.Height), grad);
// Convert to GrayscaleBitmap to be used as Renderer.TransparencyMaskBitmap:
using var gsb = mask.ToGrayscaleBitmap();
// Create a bitmap to draw on, fill it with yellow background:
using var bmp1 = new GcBitmap(h2, h2, true);
using var g = bmp1.CreateGraphics(Color.Yellow);
// Apply the transparency mask:
g.Renderer.TransparencyMaskBitmap = gsb;
// Fill 3 circles, note how the fill gradually changes
// from transparent to opaque (left to right) along with the gradient:
var d = h2 / 25f;
var rc = new RectangleF(0, 0, h2 * 0.7f, h2 * 0.7f);
var bmp = new GcBitmap(pixelSize.Width, pixelSize.Height, true, dpi, dpi);
bmp.Clear(Color.White);
FillCircles(g, rc, h2, d);
bmp.BitBlt(bmp1, 0, 0);
g.Renderer.TransparencyMaskBitmap = null;
FillCircles(g, rc, h2, d);
bmp.BitBlt(bmp1, h2, 0);
// Add some explanatory texts below the images:
var gg = bmp.CreateGraphics();
rc = new RectangleF(0, h2 + d, h2 - d * 2, h2 - d * 2);
var tf = new TextFormat()
{
Font = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "cour.ttf")),
FontSize = 16
};
gg.DrawString(
"The circles in the image above were rendered with TransparencyMaskBitmap " +
"on the target graphics set to a linear gradient from transparent to opaque.",
tf, rc, TextAlignment.Center, ParagraphAlignment.Near);
rc.Offset(h2, 0);
gg.DrawString(
"The circles in the image above were rendered with no TransparencyMaskBitmap " +
"on the target graphics.",
tf, rc, TextAlignment.Center, ParagraphAlignment.Near);
return bmp;
}
void FillCircles(GcBitmapGraphics g, RectangleF rc, float h2, float d)
{
var r = rc;
r.Offset((h2 - rc.Width) / 2, 0);
r.Inflate(-d, -d);
g.FillEllipse(r, Color.Red);
r = rc;
r.Offset(h2 - rc.Width, h2 - rc.Height);
r.Inflate(-d, -d);
g.FillEllipse(r, Color.Green);
r = rc;
r.Offset(0, h2 - rc.Height);
r.Inflate(-d, -d);
g.FillEllipse(r, Color.Blue);
}
}
}