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

Dec 17, 2016 am 10:20 AM

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中国語サイトにご注目ください!

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

c#.netの継続的な関連性:現在の使用法を見る c#.netの継続的な関連性:現在の使用法を見る Apr 16, 2025 am 12:07 AM

C#.NETは、複数のアプリケーション開発をサポートする強力なツールとライブラリを提供するため、依然として重要です。 1)C#は.NETフレームワークを組み合わせて、開発を効率的かつ便利にします。 2)C#のタイプの安全性とゴミ収集メカニズムは、その利点を高めます。 3).NETは、クロスプラットフォームの実行環境とリッチAPIを提供し、開発の柔軟性を向上させます。

Webからデスクトップまで:C#.NETの汎用性 Webからデスクトップまで:C#.NETの汎用性 Apr 15, 2025 am 12:07 AM

c#.netisversatileforbothwebanddesktopdevelopment.1)forweb、useasp.netfordynamicapplications.2)fordesktop、equindowsorwpfforrichinterfaces.3)usexamarinforcross-platformdeveliment、enabling deshacrosswindows、

汎用性のある.NET言語としてのC#:アプリケーションと例 汎用性のある.NET言語としてのC#:アプリケーションと例 Apr 26, 2025 am 12:26 AM

C#は、エンタープライズレベルのアプリケーション、ゲーム開発、モバイルアプリケーション、Web開発で広く使用されています。 1)エンタープライズレベルのアプリケーションでは、C#がasp.netcoreにWebAPIを開発するためによく使用されます。 2)ゲーム開発では、C#がUnityエンジンと組み合わされて、ロールコントロールやその他の機能を実現します。 3)C#は、コードの柔軟性とアプリケーションのパフォーマンスを改善するために、多型と非同期プログラミングをサポートします。

c#.netはあなたにぴったりですか?その適用性の評価 c#.netはあなたにぴったりですか?その適用性の評価 Apr 13, 2025 am 12:03 AM

c#.netissuitableforenterprise-levelApplicationsとsystemduetoitsSystemdutyping、richlibraries、androbustperformance.

.NET内のC#コード:プログラミングプロセスの調査 .NET内のC#コード:プログラミングプロセスの調査 Apr 12, 2025 am 12:02 AM

.NETでのC#のプログラミングプロセスには、次の手順が含まれます。1)C#コードの作成、2)中間言語(IL)にコンパイルし、3).NETランタイム(CLR)によって実行される。 .NETのC#の利点は、デスクトップアプリケーションからWebサービスまでのさまざまな開発シナリオに適した、最新の構文、強力なタイプシステム、および.NETフレームワークとの緊密な統合です。

c#.net and the Future:新しいテクノロジーへの適応 c#.net and the Future:新しいテクノロジーへの適応 Apr 14, 2025 am 12:06 AM

C#と.NETは、継続的な更新と最適化を通じて、新しいテクノロジーのニーズに適応します。 1)C#9.0および.NET5は、レコードタイプとパフォーマンスの最適化を導入します。 2).Netcoreは、クラウドネイティブおよびコンテナ化されたサポートを強化します。 3)ASP.Netcoreは、最新のWebテクノロジーと統合されています。 4)ML.NETは、機械学習と人工知能をサポートしています。 5)非同期プログラミングとベストプラクティスはパフォーマンスを改善します。

azure/awsへのc#.netアプリケーションの展開:ステップバイステップガイド azure/awsへのc#.netアプリケーションの展開:ステップバイステップガイド Apr 23, 2025 am 12:06 AM

c#.netアプリをAzureまたはAWSに展開する方法は?答えは、AzureAppServiceとAwselasticBeanStalkを使用することです。 1。Azureでは、AzureAppServiceとAzurePipelinesを使用して展開を自動化します。 2。AWSでは、Amazon ElasticBeanstalkとAwslambdaを使用して、展開とサーバーレス計算を実装します。

C#と.NETランタイム:それらがどのように連携するか C#と.NETランタイム:それらがどのように連携するか Apr 19, 2025 am 12:04 AM

C#と.NETランタイムは密接に連携して、開発者に効率的で強力なプラットフォームの開発機能に力を与えます。 1)C#は、.NETフレームワークとシームレスに統合するように設計されたタイプセーフおよびオブジェクト指向のプログラミング言語です。 2).NETランタイムは、C#コードの実行を管理し、ガベージコレクション、タイプの安全性、その他のサービスを提供し、効率的でクロスプラットフォームの操作を保証します。

See all articles