[C#]リサイズ時の再描画
リサイズ時に再描画を行う
フォームのイベントの中にはResizeがあるが、この中に再描画処理を書くだけであれば
以下のように対応することができる。
private void Form1_Load(object sender, EventArgs e)
{
SetStyle(ControlStyles.ResizeRedraw, true);
}
SetStyleメソッドにResizeRedrawを有効にする引数を渡せば、自動でリサイズ時に再描画する。
ただし、ちらつきが起こることになるので、DoubleBufferd を「true」にすること。
[C#]グラデーション
背景にグラデーションをかける
図のように、上から下へ、赤から青となるようなグラデーションをかけてみた。
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
・・・
private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
using(Brush br = new LinearGradientBrush(
g.VisibleClipBounds,
Color.Red,
Color.Blue,
LinearGradientMode.Vertical))
using (Pen pen = new Pen(Color.Black, 1))
{
g.FillRectangle(br, ClientRectangle);
}
}
・・・
System.Drawing.Drawing2D名前空間の LinearGradientBrushクラスを使って
グラデーションを描画。
第4引数に渡すモードによってグラデーションの流れを変更できる。
Vertical : 垂直方向(上から下)
Horizontal : 水平方向(左から右)
ForwardDiagonal : 左下から右上
BackwardDiagonal : 右上から左下
[C#]図形の描画
いろいろな図形を描画する
簡単なものだけとりあえず。
複数の点を繋いだPolygonやLines、ベジエ曲線などもある。
気をつけるのは、外周の1ピクセル。
塗りつぶしの場合は、外周のみを描画するのに比べて1ピクセル分範囲が狭い。
同じ領域に塗りつぶしと外周描画を行うと、どちらを先に描画しても
外周は表示されている状態になる。
private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
using (Brush br = new SolidBrush(Color.SteelBlue))
using (Pen pen = new Pen(Color.Green, 1))
{
// 直線
g.DrawLine(pen, new Point(10, 10), new Point(100, 10));
// 円弧
g.DrawArc(pen, new Rectangle(10, 20, 30, 30), 0, 270);
// 円
g.DrawEllipse(pen, new Rectangle(10, 60, 30, 30));
// 円塗りつぶし
g.FillEllipse(br, new Rectangle(50, 60, 30, 30));
// 扇形
g.DrawPie(pen, new Rectangle(10, 100, 30, 30), 0, -270);
// 扇形塗りつぶし
g.FillPie(br, new Rectangle(50, 100, 30, 30), 0, 180);
// 四角形
g.DrawRectangle(pen, new Rectangle(10, 140, 30, 30));
// 四角形塗りつぶし
g.FillRectangle(br, new Rectangle(50, 140, 30, 30));
// 文字列
g.DrawString("sample", Font, br, new Point(10, 180));
}
}
[C#]画像の表示
ディスクから読み込んだ画像を表示する
[環境]
VisualStudio2008
C# Windowsフォームアプリケーション
[デザイナ]
・Form
→ AutoScroll:True
・PictureBox
→ Name:_pict(任意)
→ SizeMode:AutoSize
[コード]
using System;
using System.Drawing;
using System.Windows.Forms;
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
string filename = "C:\\sample.bmp";
_pict.Image = Bitmap.FromFile(filename);
}
}
[説明]
フォーム上にPictureBoxを任意の場所に貼り付け、その場所にディスクから
読み込んだイメージを表示するには、PictureBoxのImageプロパティに
ビットマップクラスのメソッド「FromFile()」の結果を渡すだけでよい。
デザイナ側でAutoSizeを指定することにより、ピクチャボックスは画像サイズに
あわせた領域を持ち、AutoScrollをフォームに設定することで、ピクチャボックスの
サイズよりもフォームが小さくなったとき、自動でスクロールバーを表示する。
また、ビットマップクラスからFromFileで渡すイメージは、ビットマップファイルに
限らない。
例えば、
string filename = "C:\\sample.jpg";
のように、JPGファイルを渡してもきちんと表示される。
ただし、読み込まれたイメージはJPG画像のビット深さを持ったビットマップとして
保持される。
(24bitのJPGを読み込んだ際のPixelFormatはFormat24bppRgbとなる。)