2017年07月 / 06月≪ 12345678910111213141516171819202122232425262728293031≫08月

インフォメーション

FC2ブログで画像等を一括アップロードするソフトを地味に配布してます。
FC2ブログ用ファイルアップロードの最新版はこちら
(ベクター)FC2ブログ用ファイルアップロード

--.--.-- (--)

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


 |  --:--  |  スポンサー広告  |  Top↑

2008.11.29 (Sat)

C#.NETでグラデーションを塗る その2

C#.NETでグラデーションを塗る
を応用して

こんなグラデーションを作りたい
hu000003.jpg
なんて時はAlpha値を利用すると便利。

作り方は
hu000000.jpg
このグラデーションと

hu000001.jpg
このグラデーションを

融合させるわけだが、後から(上から)塗るグラデーションはアルファ値をグラデーションさせるようにすると素敵に融合する。

ソースコード

private void Form1_Load(object sender, EventArgs e)
{
// 描画用Bitmap生成
pictureBox1.Image = new Bitmap(pictureBox1.Width, pictureBox1.Height);
// BitmapからGraphics取得
Graphics g = Graphics.FromImage(pictureBox1.Image);

// 白→赤のベースとなる横グラデーション
System.Drawing.Drawing2D.LinearGradientBrush lgb =
new System.Drawing.Drawing2D.LinearGradientBrush(g.VisibleClipBounds,
Color.White, Color.Red,
System.Drawing.Drawing2D.LinearGradientMode.Horizontal);
// グラデーション塗りつぶし
g.FillRectangle(lgb, g.VisibleClipBounds);

// ブラシ破棄(必要なのかは不明)
lgb.Dispose();

// アルファ値0->アルファ値255の、アルファ値のみ黒縦グラデーション
lgb = new System.Drawing.Drawing2D.LinearGradientBrush(g.VisibleClipBounds,
Color.FromArgb(0, Color.Black), Color.FromArgb(255, Color.Black),
System.Drawing.Drawing2D.LinearGradientMode.Vertical);
// 塗りつぶし
g.FillRectangle(lgb, g.VisibleClipBounds);

// 破棄
lgb.Dispose();
g.Dispose();
}


アルファ値のありがたみを感じた瞬間。
スポンサーサイト


 |  02:25  |  C#.NET  |  トラックバック(0)  |  コメント(0)  |  Top↑

2008.11.26 (Wed)

C#.NETでグラデーションを塗る

C#.NETでグラデーションを使う場合、System.Drawing.Drawing2Dにあるグラデーションをクラスを使うみたい。

下記はフォームにPictureBoxを設置して、そこに描画してる。

赤と青の横グラデーション
b000048.jpg

private void Form1_Load(object sender, EventArgs e)
{
pictureBox1.Image = new Bitmap(pictureBox1.Width, pictureBox1.Height);
Graphics g = Graphics.FromImage(pictureBox1.Image);

// グラデーションブラシ 赤→青の水平(Horizontal)グラデーション
System.Drawing.Drawing2D.LinearGradientBrush lgb =
new System.Drawing.Drawing2D.LinearGradientBrush(g.VisibleClipBounds,
Color.Red, Color.Blue,
System.Drawing.Drawing2D.LinearGradientMode.Horizontal);

// 塗りつぶし
g.FillRectangle(lgb, g.VisibleClipBounds);

// 破棄
lgb.Dispose();
g.Dispose();
}




3色以上の複数色グラデーションを書く場合、
System.Drawing.Drawing2D.ColorBlendで細かく指定する。
PositionsとColorsの要素数は同じにしないとエラーになる。

シアン、マゼンタ、イエローの横三色グラデーション
b000050.jpg

private void Form1_Load(object sender, EventArgs e)
{
pictureBox1.Image = new Bitmap(pictureBox1.Width, pictureBox1.Height);
Graphics g = Graphics.FromImage(pictureBox1.Image);

// グラデーションブラシ
System.Drawing.Drawing2D.LinearGradientBrush lgb =
new System.Drawing.Drawing2D.LinearGradientBrush(g.VisibleClipBounds,
Color.Red, Color.Blue,
System.Drawing.Drawing2D.LinearGradientMode.Horizontal);

// ColorBlendクラスを生成
System.Drawing.Drawing2D.ColorBlend cb = new System.Drawing.Drawing2D.ColorBlend();
// 色変化位置(最後の要素は1.0fになるようにするらしい)
cb.Positions = new float[] { 0.0f, 0.5f, 1.0f };
// 色指定
cb.Colors = new Color[] { Color.Cyan, Color.Magenta, Color.Yellow };

// ブラシのInterpolationColorsに設定
lgb.InterpolationColors = cb;

// 塗りつぶし
g.FillRectangle(lgb, g.VisibleClipBounds);

// 破棄
lgb.Dispose();
g.Dispose();
}



 |  18:35  |  C#.NET  |  トラックバック(0)  |  コメント(0)  |  Top↑
 | BLOGTOP | 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。