Assertion Failed! -12ページ目

[C#]リサイズ時の再描画

リサイズ時に再描画を行う


フォームのイベントの中にはResizeがあるが、この中に再描画処理を書くだけであれば

以下のように対応することができる。



private void Form1_Load(object sender, EventArgs e)
{
  SetStyle(ControlStyles.ResizeRedraw, true);
}


SetStyleメソッドにResizeRedrawを有効にする引数を渡せば、自動でリサイズ時に再描画する。


ただし、ちらつきが起こることになるので、DoubleBufferd を「true」にすること。

[C#]フォームの透過

フォームを任意の色で透過する



Assertion Failed!-フォームの透過


以下のような設定を行うと、指定した色が透過して表示される。

今回の例は、BackColorを透過色として指定することで、裏側のウィンドウが見える状態になる。


private void Form1_Load(object sender, EventArgs e)
{

  // フォームを背景色で透過
  this.TransparencyKey = BackColor;
}


TransparencyKey プロパティに透過したい色を指定する。


使い道はよくわからない。

[C#]グラデーション

背景にグラデーションをかける


Assertion Failed!-グラデーション


図のように、上から下へ、赤から青となるようなグラデーションをかけてみた。



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#]図形の描画

いろいろな図形を描画する



Assertion Failed!-図形描画


簡単なものだけとりあえず。

複数の点を繋いだ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フォームアプリケーション


Assertion Failed!-画像表示


[デザイナ]

・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を任意の場所に貼り付け、その場所にディスクから

読み込んだイメージを表示するには、PictureBoxImageプロパティに

ビットマップクラスのメソッド「FromFile()」の結果を渡すだけでよい。


デザイナ側でAutoSizeを指定することにより、ピクチャボックスは画像サイズに

あわせた領域を持ち、AutoScrollをフォームに設定することで、ピクチャボックスの

サイズよりもフォームが小さくなったとき、自動でスクロールバーを表示する。


また、ビットマップクラスからFromFileで渡すイメージは、ビットマップファイルに

限らない。


例えば、


 string filename = "C:\\sample.jpg";


のように、JPGファイルを渡してもきちんと表示される。


ただし、読み込まれたイメージはJPG画像のビット深さを持ったビットマップとして

保持される。

(24bitのJPGを読み込んだ際のPixelFormatはFormat24bppRgbとなる。)