描画から画面に作成されたビットマップをレンダリングしようとしていますが、最小化と最大化を再度行った後にのみレンダリングします。
私は次の手順に従います:C#で永続的なグラフィックスにビットマップを使用する
ただし、Load_Formの外部の画面でのみビットマップをレンダリングできます。
私がコードを入れた場合:
using System.Drawing;
...
Graphics graphicsObj;
myBitmap = new Bitmap(this.ClientRectangle.Width,
this.ClientRectangle.Height,
Imaging.PixelFormat.Format24bppRgb);
graphicsObj = Graphics.FromImage(myBitmap);
Pen myPen = new Pen(Color.Plum, 3);
Rectangle rectangleObj = new Rectangle(10, 10, 200, 200);
graphicsObj.DrawEllipse(myPen, rectangleObj);
graphicsObj.Dispose();
他の場所、たとえばボタンの場合、画像を表示するには最小化と最大化が必要です。
編集:
bmpはビットマップグローバル変数です。フォームイベントLoad_Form1でインスタンスを作成します。
bmp = new Bitmap(this.ClientRectangle.Width,
this.ClientRectangle.Height,
System.Drawing.Imaging.PixelFormat.Format24bppRgb);
再描画のためのフォームのペイントイベント:
private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics graphicsObj = e.Graphics;
graphicsObj.DrawImage(myBitmap, 0, 0, myBitmap.Width, myBitmap.Height);
graphicsObj.Dispose();
}
ただし、図面を作成したらすぐに描画する必要があります。
全体像について話さないと、最善の行動方針を推奨することは困難になりますが、2つの可能な目的を単純に想定します。
フォームに何かを描画したいだけです
または、どんどん多くのものを描画するビットマップを表示したい。
最初に必要なのは、次のPaint
ようにイベントをコーディングすることだけです。
private void Form1_Paint(object sender, PaintEventArgs e)
{
Rectangle rectangleObj = new Rectangle(10, 10, 200, 200);
using (Pen myPen = new Pen(Color.Plum, 3))
e.Graphics.DrawEllipse(myPen, rectangleObj);
}
図面を制御するデータが動的である場合は、それらをクラスレベルの変数またはリストに保存し、Paint
イベントで使用できるように必要に応じて変更する必要があります。
後者の目的では、ビットマップに追加するときにさまざまなことがあります。
したがって、おそらくクラスレベルを作成することから始めますBitmap
。
public Form1()
{
InitializeComponent();
bmp = new Bitmap(this.ClientRectangle.Width,
this.ClientRectangle.Height);
}
Bitmap bmp = null;
そして、あなたがこのようにそれに引き込む1つ以上の場所を持っています:
void drawALittle()
{
Rectangle rectangleObj = new Rectangle(10, 10, 200, 200);
using (Pen myPen = new Pen(Color.Plum, 3))
using (Graphics G = Graphics.FromImage(bmp))
{
G.DrawEllipse(myPen, rectangleObj);
//..
}
this.Invalidate();
}
を変更しInvalidate
たForm
後Bitmap
、Paint
イベントがトリガーされることに注意してください。
また、これらの更新が非常に頻繁に発生する場合は、呼び出しの合間にGraphicsオブジェクトを存続させることをお勧めします。ビットマップのようなクラス変数にするか、すべての更新を行うメソッドにローカルに保持して、パラメータとして描画メソッドに渡します。
フォームのPaint
イベントで必要なのは
private void Form1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawImage(bmp, 0, 0);
}
また32bppARGB
、これが推奨されるデフォルトの形式であることに注意してください。Isは、どのような場合でも表示するものすべてに使用されるため、最初に使用するのが最も効率的です。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加