gpt4 book ai didi

c# - 使用位图作为缓冲区绘制到面板

转载 作者:太空宇宙 更新时间:2023-11-03 20:23:12 24 4
gpt4 key购买 nike

我一直在学习如何使用位图绘制到面板。我想我会运行一个试用程序来简单地将白色面板变成黑色。 (可能看起来是一种复杂的方法,但这只是为了测试基础知识)我的程序如下:

public partial class Form1 : Form
{
private Bitmap buffer = new Bitmap(100,100);

public Form1()
{
InitializeComponent();
}

private void panel1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawImageUnscaled(buffer, Point.Empty);
}

private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < 100; i++)
{
for (int j = 0; j < 100; j++)
{
buffer.SetPixel(i, j, Color.Black);
}
}
}
}

当我运行它并按下按钮时,面板似乎没有改变。任何我出错的想法。提前谢谢你。

最佳答案

你必须 invalidate面板的客户区,以便 Windows 强制重绘。但还有一些其他问题:

  1. FillRectangle正如@Tony 建议的那样,与循环绘制每个像素相比,这样做的效率要高得多。
  2. 如果面板在 buffer 准备好显示之前失效,您可能会遇到并发问题。确保位图生成与其呈现相隔离。

这些建议总结如下(但未经测试):

private void button1_Click(object sender, EventArgs e)
{
Bitmap tempBuffer = new Bitmap(100, 100);

using (Graphics g = Graphics.FromImage(tempBuffer))
using (SolidBrush blackBrush = new SolidBrush(Color.Black))
{
g.FillRectangle(blackBrush, new Rectangle(0, 0, tempBuffer.Width-1, tempBuffer.Height-1);
}

buffer = tempBuffer;
panel1.Invalidate();
}

关于c# - 使用位图作为缓冲区绘制到面板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12219797/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com