Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 创建位图时发生异常_C#_Winforms_Colors_Bitmap_System.drawing - Fatal编程技术网

C# 创建位图时发生异常

C# 创建位图时发生异常,c#,winforms,colors,bitmap,system.drawing,C#,Winforms,Colors,Bitmap,System.drawing,我目前正在编写一个程序,它可以创建颜色并将其输出到pictureBox。我在3D for循环中这样做,以创建所有RGB颜色。所有这些都发生在一个幕后工作者身上。我的代码如下所示: private void ColorWorker_DoWork(object sender, DoWorkEventArgs e) { Color color; String hex; Bitmap image; Invoke((MethodInvoker)delegate { progr

我目前正在编写一个程序,它可以创建颜色并将其输出到pictureBox。我在3D for循环中这样做,以创建所有RGB颜色。所有这些都发生在一个幕后工作者身上。我的代码如下所示:

private void ColorWorker_DoWork(object sender, DoWorkEventArgs e)
{
  Color color;
  String hex;
  Bitmap image;

  Invoke((MethodInvoker)delegate
  {
    progressBar1.Maximum = (255 * 255 * 255);
    progressBar1.Value = 0;
  });

  for (int r = 0; r <= 255; r++)
  {
    for (int g = 0; g <= 255; g++)
    {
      for (int b = 0; b <= 255; b++)
      {
        hex = "#FF" + r.ToString("X2") + g.ToString("X2") + b.ToString("X2");
        color = System.Drawing.ColorTranslator.FromHtml(hex);
        image = new Bitmap((int)nudWidth.Value, (int)nudHeight.Value);

        using (Graphics gfx = Graphics.FromImage(image))
        using (SolidBrush brush = new SolidBrush(color))
        {
          gfx.FillRectangle(brush, 0, 0, image.Width, image.Height);
        }             

        Invoke((MethodInvoker)delegate
        {
          pictureBox1.Image = image;
          progressBar1.Value++;
          label13.Text = progressBar1.Value + " / " + progressBar1.Maximum;
        });
      }
    }
  }
}

当应用程序崩溃时,请在任务管理器中检查内存使用情况-它可能相当大

每次都要清理位图,否则它们会泄漏一些严重的信息

Bitmap previousImage = null;
for(r... g... b...)
{
    // ...

    Invoke((MethodInvoker) delegate
    {
            var previousImage = pictureBox1.Image;
        pictureBox1.Image = image;
        if (previousImage != null)
            previousImage.Dispose();
    });
}

您是否可以在此处发布完整的异常,包括消息、内部异常和堆栈跟踪?请指出在您的示例代码的哪一行发生异常。添加了一些内容希望足够
Bitmap previousImage = null;
for(r... g... b...)
{
    // ...

    Invoke((MethodInvoker) delegate
    {
            var previousImage = pictureBox1.Image;
        pictureBox1.Image = image;
        if (previousImage != null)
            previousImage.Dispose();
    });
}