今日、私はパネルを描くときに、パネルが点滅する問題を解決しようとしています。
私が読んだたくさんのスレッド、これらのように:
そこで、doubleBufferedを使用してPictureBox、MyPanelに描画しようとしましたが、読んだときに、毎回g.Clear()を使用できないことがわかりました。その後、doubleBuffered以外のパネルでも、点滅が消えました。
描画が完了したらグラフィックを解放する必要があることも読みました。だから私はどこでもusing(Graphics g = panel.CreateGraphics())を使用します。
だから私の質問は、ビットマップに何かを描いたときにだけグラフィックスを作成するのは素晴らしいアイデアですか?ビットマップとグラフィックス(すべてのコンポーネントではなく、このビットマップのみ)を作成する前は、毎回このビットマップでグラフィックスを使用できたためです。
これが私のコードです:
public void newSizeDrawing()
{
Size size = collector.getLetterSize(selectedName);
Size drawingSize = new Size(size.Width * (pixelSizeArray[pixelSize] + 1),size.Height * (pixelSizeArray[pixelSize] + 1));
bitmapDraw = new Bitmap(drawingSize.Width, drawingSize.Height);
int width = (this.MinimumSize.Width - panelDraw.MinimumSize.Width) + drawingSize.Width + 10;
int height = (this.MinimumSize.Height - panelDraw.MinimumSize.Height) + drawingSize.Height + 10;
this.Size = new Size(
(width > this.MinimumSize.Width) ? width : this.MinimumSize.Width,
(height > this.MinimumSize.Height) ? height : this.MinimumSize.Height);
zeroDrawPosition = new Point((panelDraw.Size.Width - bitmapDraw.Width) / 2 - 1, (panelDraw.Size.Height - bitmapDraw.Height) / 2 - 1);
using (Graphics g = panelDraw.CreateGraphics())
{
g.Clear(panelDraw.BackColor);
}
redrawDrawingLetter();
}
public void redrawDrawingLetter()
{
bool[][] grid = collector.getArray(selectedName);
using (Graphics graphicDraw = Graphics.FromImage(bitmapDraw))
{
graphicDraw.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighSpeed;
graphicDraw.Clear(panelDraw.BackColor);
int pxSize = pixelSizeArray[pixelSize];
for (int y = 0; y < grid.Length; y++)
{
for (int x = 0; x < grid[y].Length; x++)
{
graphicDraw.FillRectangle((grid[y][x] ? Brushes.Black : Brushes.White), x * (pxSize + 1), y * (pxSize + 1), pxSize, pxSize);
}
}
}
redrawDrawingPanel();
}
private void redrawDrawingPanel()
{
using (Graphics g = panelDraw.CreateGraphics())
{
if (bitmapDraw != null)
g.DrawImage(bitmapDraw, zeroDrawPosition);
}
}
private void panelDraw_Paint(object sender, PaintEventArgs e)
{
redrawDrawingPanel();
}
誰も私にC#で最良の方法で描く方法を説明することはできません。だから私のコードは良くないかもしれませんが、それが私がそれを正しく行う方法を尋ねる理由です。
newSizeDrawing
ユーザーが+または-ボタンをクリックしたときにのみ、自分で呼び出されます。ピクセルがオンまたはオフの場合、ブール値の2次元配列があります。これは、マイクロチップとLEDディスプレイ(多くの場合、文字の高さ8px)の文字を描画するためのプログラムです。
マウスがある「ピクセル」から別の「ピクセル」に移動したかどうかをチェックするメソッドを作成しました。「ピクセル」は10x10ピクセルから30x30ピクセルになる可能性があるため、mouseMoveイベントを呼び出すたびに再描画することはありません。