Gradients.cs
//
// このコードは、DioDocs for Imaging のサンプルの一部として提供されています。
// © MESCIUS inc. All rights reserved.
//
using System;
using System.IO;
using System.Drawing;
using GrapeCity.Documents.Imaging;
using GrapeCity.Documents.Text;
using GrapeCity.Documents.Drawing;
namespace DsImagingWeb.Demos
{
// LinearGradientBrush と RadialGradientBrush を使用してグラデーション塗りつぶしを作成する方法を示します。
public class Gradients
{
public GcBitmap GenerateImage(Size pixelSize, float dpi, bool opaque, string[] sampleParams = null)
{
var bmp = new GcBitmap(pixelSize.Width, pixelSize.Height, true, dpi, dpi);
var Inch = dpi;
using (var g = bmp.CreateGraphics(Color.RoyalBlue))
{
var testRectSize = new SizeF(Inch * 6, Inch);
var dy = Inch / 6;
// ラベルを描画するためのテキストレイアウトを作成します。
var tl = g.CreateTextLayout();
tl.DefaultFormat.FontSize = Inch / 6;
tl.DefaultFormat.ForeColor = Color.Chartreuse;
tl.MaxWidth = testRectSize.Width;
tl.MaxHeight = testRectSize.Height;
tl.TextAlignment = TextAlignment.Center;
tl.ParagraphAlignment = ParagraphAlignment.Center;
// 注釈 1
var rc = Common.Util.AddNote("Linear gradients using LinearGradientBrush:", g, new RectangleF(Inch, Inch / 2, 500, 100));
// テキストの挿入ポイントを設定します。
PointF ip = new PointF(rc.Left, rc.Bottom + dy);
// グラデーションで塗りつぶされた矩形を描画するためのローカルアクションです。
Action<GrapeCity.Documents.Drawing.Brush, string> drawSwatch = (b_, txt_) =>
{
var rect = new RectangleF(ip, testRectSize);
// 矩形をグラデーションブラシで塗りつぶします。
g.FillRectangle(rect, b_);
// 枠線やテキスト情報などを描画します。
g.DrawRectangle(rect, Color.Magenta);
tl.Clear();
tl.Append(txt_);
tl.MaxHeight = testRectSize.Height;
tl.MaxWidth = testRectSize.Width;
tl.PerformLayout(true);
g.DrawTextLayout(tl, ip);
ip.Y += rect.Height + dy;
};
// LinearGradientBrush
// 水平方向のグラデーションを描画します。
LinearGradientBrush linearGradBrush = new LinearGradientBrush(Color.Red, Color.Blue);
drawSwatch(linearGradBrush, $"Linear gradient\nfrom {linearGradBrush.StartPoint} to {linearGradBrush.EndPoint}");
// 垂直方向のグラデーションを描画します。
linearGradBrush = new LinearGradientBrush(Color.Red, new PointF(0, 0), Color.Green, new PointF(0, 1));
drawSwatch(linearGradBrush, $"Linear gradient\r\nfrom {linearGradBrush.StartPoint} to {linearGradBrush.EndPoint}");
// 斜め方向のグラデーション(対角線を見やすくするためにスウォッチの高さを2倍にします)。
testRectSize.Height *= 2;
linearGradBrush = new LinearGradientBrush(Color.Red, new PointF(0, 0), Color.Teal, new PointF(1, 1));
drawSwatch(linearGradBrush, $"Linear gradient\r\nfrom {linearGradBrush.StartPoint} to {linearGradBrush.EndPoint}");
// RadialGradientBrush
rc = Common.Util.AddNote("Radial gradients using RadialGradientBrush:", g, new RectangleF(ip, new SizeF(500, 100)));
ip.Y = rc.Bottom + dy;
// 中央に配置する場合
// testRectSize.Height *= 2;
RadialGradientBrush radialGradBrush = new RadialGradientBrush(Color.Orange, Color.Purple);
drawSwatch(radialGradBrush, $"Radial gradient\r\nwith origin at {radialGradBrush.GradientOrigin}");
// 中心を右下隅に配置する場合
radialGradBrush = new RadialGradientBrush(Color.OrangeRed, Color.DarkBlue, new PointF(1, 1));
drawSwatch(radialGradBrush, $"Radial gradient\r\nwith origin at {radialGradBrush.GradientOrigin}");
}
// 画像ファイルを保存します。
return bmp;
}
}
}