C# GDI+ プログラミング (1)

高洛峰
リリース: 2016-12-17 10:20:02
オリジナル
1057 人が閲覧しました

C++ で書かれていますが、常にいくつかの類似点があります。

ウィンドウが更新されるとPaintイベントが生成されるので、このイベントにハンドラー関数を追加します。次に、この関数でグラフを描画します。これにより、描画した画像が更新されることなく、常に表示できるようになります。 Paint イベントに対応するデリゲートは次のとおりです: public delegate void PaintEventHandler(object sender, PaintEventArgs e);

最も単純な描画から始めて、ウィンドウ上に線を描きます。 (WindowsForms アプリケーションの作成)

public Partial class Form1: Form

{

public Form1()
InitializeComponent();

//Pa int イベント ハンドラーを追加
を通じてout through out through out through out through out through out through over through over ''s to's to‐‐‐‐‐‐‐‐ int イベント ハンドラーによって処理されるようにします

Formpaaint (Object SENDER, PAINTEVENTARGS E)

{
Graphics Graphics = E.Graphics;
// ブラシ、緑、幅 2 ピクセル
penpen(color.fromargb (0,255,0), 2)
// 2 つの点は 0,0 と 100,100 です
グラフィックス.DrawLine(pen, new Point(0,0), new Point(100,100)); 画像もありますが、これらはすべて Graphics クラスを通じて完成させることができます。

例 2: 塗りつぶされた長方形

Graphics graphics = e.Graphics;
//青いブラシ
SolidBrush Brush = new SolidBrush(Color.FromArgb(0, 0, 255));

//長方形

Rectangle rect = new Rectangle(0, 0, 100, 100);

//四角形を塗りつぶす

graphics.FillRectangle(brush, rect);

例 3: PNG 画像を描画します (透過画像、GIF 画像を表示できるため PNG を使用します)また、この効果があります)private void formpaaint(object sender、painteventargs e){グラフィックスグラフィック= e.graphics;四角形内
Rectangle rectangle(50,50,100,100);
graphics.DrawImage(img, rect); いくつかのオーバーロードは四角形内に文字列を表示できます。表示形式。ここでは詳細には触れません。

より一般的に使用されるものについてのみ話します。

例を見て、キーボード入力文字イベントを処理し、入力された文字をウィンドウに表示します。以下の通り:

public 部分クラス Form1: Form
{
public static String strText = "";
public Form1()
InitializeComponent();
This.Paint += formPaint;
this.KeyPress += formKeyPress;

}
private void formPaint(Object sender, PaintEventArgs e)
{
Graphics graphics = e.Graphics;
//ブラシを作成します
SolidBrush Brush=new SolidBrush(Color.FromArgb(0,255,0));
// フォントを作成します
Font font= new Font("宋体",20f);
private void formKeyPress(object sender, KeyPressEventArgs e)


また、graphics.DrawString(strText, font, Brush, new Point(100, 100 ));表示モード指定しますテキスト表示の開始位置。

表示形式については、次の例を参照してください:

//四角形内に文字列を表示します
StringFormat strFormat = new StringFormat(StringFormatFlags.DirectionRightToLeft)
graphics.DrawString(strText, font, Brush, this.ClientRectangle,strFormat); ;

StringFormatFlags は列挙型です。各列挙メンバーがどのような形式を表すかを 1 つずつ試してください。

次に見てみましょう。 Form クラスのデフォルトのイベント処理メソッドと追加したイベント処理メソッドの間にはどのような関係がありますか。

例: マウスの左ボタンイベントの処理

パブリック部分クラス Form1: Form
prBackColor MouseDown += formMouseDown; {
use with using マウスの右ボタン e.Button == MOUSEBUTTONS.RIGHT)
{
form1 form1 = (form1) sendえー、
//バックグラウンドColorを変更するform1.backcolor = color.fromargb(0、255、0); form1 = (Form1)sender;
Form1.BackColor = prBackColor;

protected virtual void OnMouseDown(MouseEventArgs e); と protected virtual void OnMouseUp(MouseEventArgs e);

このようにして、イベントを追加せずにマウス イベントを処理できます。処理メソッド。親クラスのデフォルトのイベント処理メソッドをオーバーライドして、上記の例を実装できます。

MSDN を確認すると、これらのデフォルトのイベント処理メソッドを呼び出すと、対応するイベントがトリガーされる可能性があることがわかります。たとえば、OnMouseDown を呼び出すと、マウスの左ボタンを押すイベントをトリガーできます。これにより、追加したイベント処理メソッド (デリゲート) が実際に実行されます。また、「+=」を使用して委任メソッドを追加するため、引き続きマルチキャスト委任を使用します。

この場合、OnMouseDown を書き換える場合は、その中の基本クラスの OnMouseDown メソッドを呼び出す必要があります。

そうしないと、追加した MouseDown メソッドは (存在する場合) 実行されません

上記のことがわかったので、実際の例を見てみましょう。背景を描画する OnPaintBackground メソッドをオーバーライドします。
P PABLIC PARTIAL CLASS FORM1: Form

{
Public Form1 () {
InitializeComponent (); Tbackground (Painteventargs E) {
// 禁止されている基本処理、背景を自分で描画しましょう b //base.onpaintbackGroundgroundgroundgroundgroundground (brush, this. ClientRctangle);
// 円を再度描画します
Pen Pen = New Pen (color.fromargb (0, 255, 0), 3);
TextureBursh 画像ブラシ

などの図形を使用できます。長方形、円形。画像が十分に大きくない場合は、並べて表示されます。

例: i Prive Void Formpaint (Object Sender, Painteventargs E)
{
Graphics Graphics = E.Graphics; , 70, 70); 7 TextureBrush ブラシ = new TextureBrush("d:\Image\345. jpg"),rect);
graphics.FillEllipse(brush, 0, 0, 200, 200);
}

コンストラクターの最後のパラメーター、rect は画像のどの部分を塗りつぶすかを示し、10,10 は塗りつぶされることを示します画像の開始位置 (左上隅)、70,70 は幅と高さを示します。画像の元の範囲を超えないように注意してください。画像全体が塗りつぶされる場合は、rect を指定する必要はありません。コンストラクターにパラメーターを入力するだけです。

LinearGradientBursh 線形グラデーション ブラシ (このクラスは System.Drawing.Drawing2D 名前空間に存在します)

LinearGradientBursh クラスには、4 つのパラメーター、2 つのポイント、2 つの色を持つコンストラクター オーバーロードがあります。

これらの 4 つのパラメータは、始点の色と終点の色を指定します。そして場所。

次の例を見てください:

パブリック部分クラス Form1: Form

{
Public Form1()
InitializeComponent(); this.Pa int += formPaint;
I}

Private Void Formpait (Object SENDER, Painteventargs E)
{
Graphics Graphics = E.Graphics (New Point (0, 0), New Point (50, 0),
color.fromargb (255, 255, 255)、Color.FromArgb(0, 0, 0));
ウィンドウ全体を埋める
graphics.FillRectangle(lineBrush, this.ClientRectangle);
開始点は 0,0 終了点は 0,50 のレンダリングです。 。白から黒へのグラデーションカラーセグメント。 50を超える部分は再び薄くなり始めます。

PSの時と同じように、白から黒へグラデーションして線を引いていきます。開始点は 0,0、終了点は 0,50 です。

それでは、この属性を持つグラデーション ブラシを使用してウィンドウ内に四角形を描画するとどうなるでしょうか。上のレンダリングを見ればわかります。

たとえば、graphics.FillRectangle(lineBrush, 0, 0, 100, 100);

この四角形のブラシ塗りつぶしは、最初の効果の対応する四角形領域と同じです。

始点と終点の値を変更しても確認できます。これはどのように記入されていますか?

たとえば、開始点は 0,0 に変更され、終了点は 50,50 に変更されます。 V Private void Formpaint (Object Sender, Painteventargs E) {

Graphics Graphics = E.Graphics (新しいポイント (0, 0), 新しいポイント (50, 50),

color.fromargb ( 255, 255, 255), Color.FromArgb(0, 0, 0));

// ウィンドウ全体を塗りつぶします

graphics.FillRectangle(lineBrush, this.ClientRectangle) (Color.FromArgb(0, 255,0);このウィンドウは最大化機能を無効にするものではなく、さらに観察するためにウィンドウ サイズを変更できます。

複数の色のグラデーション


LinearGradientBrush クラスには、複数の色のグラデーションを指定できる InterpolationColors 属性メンバーがあります。このメンバーは、前のグラデーションと同様に、InterpolationColors を使用した後は 2 色のグラデーションにのみ制限されます。赤から緑、そして緑から青へのグラデーションなど、さまざまな色を使用できます。

例を見てください:
V Private Void Formpaint (Object Sender, Painteventargs E) {

// colorBlend オブジェクトを作成し、さまざまな色のグラデーション情報を指定します
colorblend color_blend = new colorblend ()
// 複数の色を指定します。 [ ; Rectangle(0,0,200,100); or.White);
ブラシ .Graphics.FillRectangle(brush,rect);
緑から青へのグラデーション。

color_blend.Positionsは色の範囲を指定します。上の長方形の幅を全体の1とすると、赤から緑のグラデーションは0/3fから2/3f、つまりこの範囲内で完成します。
範囲 赤から緑へのグラデーションを求める場合、緑から青へのグラデーションの範囲は2/3f〜3/3fとなります。

半分ずつ共有したい場合は、color_blend.Positions=new float[]{0/2f,1/2f,2/2f};





その他の C# GDI+ プログラミング (1)関連記事はPHP中国語サイトにご注目ください!

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!