title: draw mandlebrot onto bitmap
body: <p>I am currently converting java code into c# code and i have it almost working i think but I am trying to draw the mandlebrot onto the bitmap but nothing is displaying . The form pops up but nothing is drawn onto it.</p>
  
  <pre><code>    using System;
      using System.Collections.Generic;
      using System.ComponentModel;
      using System.Data;
      using System.Drawing;
      using System.Linq;
      using System.Text;
      using System.Threading.Tasks;
      using System.Windows.Forms;
  
      namespace Assignment1
      {
          public partial class Form1 : Form
          {
              public Form1()
              {
                  init();
                  start();
                  stop();
                  destroy();
                  InitializeComponent();
  
              }
  
  
              public struct HSBColor
              {
                  float h;
                  float s;
                  float b;
                  int a;
  
                  public HSBColor(float h, float s, float b)
                  {
                      this.a = 0xff;
                      this.h = Math.Min(Math.Max(h, 0), 255);
                      this.s = Math.Min(Math.Max(s, 0), 255);
                      this.b = Math.Min(Math.Max(b, 0), 255);
                  }
  
                  public HSBColor(int a, float h, float s, float b)
                  {
                      this.a = a;
                      this.h = Math.Min(Math.Max(h, 0), 255);
                      this.s = Math.Min(Math.Max(s, 0), 255);
                      this.b = Math.Min(Math.Max(b, 0), 255);
                  }
  
                  public float H
                  {
                      get { return h; }
                  }
  
                  public float S
                  {
                      get { return s; }
                  }
  
                  public float B
                  {
                      get { return b; }
                  }
  
                  public int A
                  {
                      get { return a; }
                  }
  
                  public Color Color
                  {
                      get
                      {
                          return FromHSB(this);
                      }
                  }
  
                  public static Color FromHSB(HSBColor hsbColor)
                  {
                      float r = hsbColor.b;
                      float g = hsbColor.b;
                      float b = hsbColor.b;
                      if (hsbColor.s != 0)
                      {
                          float max = hsbColor.b;
                          float dif = hsbColor.b * hsbColor.s / 255f;
                          float min = hsbColor.b - dif;
  
                          float h = hsbColor.h * 360f / 255f;
  
                          if (h &lt; 60f)
                          {
                              r = max;
                              g = h * dif / 60f + min;
                              b = min;
                          }
                          else if (h &lt; 120f)
                          {
                              r = -(h - 120f) * dif / 60f + min;
                              g = max;
                              b = min;
                          }
                          else if (h &lt; 180f)
                          {
                              r = min;
                              g = max;
                              b = (h - 120f) * dif / 60f + min;
                          }
                          else if (h &lt; 240f)
                          {
                              r = min;
                              g = -(h - 240f) * dif / 60f + min;
                              b = max;
                          }
                          else if (h &lt; 300f)
                          {
                              r = (h - 240f) * dif / 60f + min;
                              g = min;
                              b = max;
                          }
                          else if (h &lt;= 360f)
                          {
                              r = max;
                              g = min;
                              b = -(h - 360f) * dif / 60 + min;
                          }
                          else
                          {
                              r = 0;
                              g = 0;
                              b = 0;
                          }
                      }
  
                      return Color.FromArgb
                          (
                              hsbColor.a,
                              (int)Math.Round(Math.Min(Math.Max(r, 0), 255)),
                              (int)Math.Round(Math.Min(Math.Max(g, 0), 255)),
                              (int)Math.Round(Math.Min(Math.Max(b, 0), 255))
                              );
                  }
  
              }
  
  
  
  
          private const int MAX = 256;      // max iterations
          private const double SX = -2.025; // start value real
          private const double SY = -1.125; // start value imaginary
          private const double EX = 0.6;    // end value real
          private const double EY = 1.125;  // end value imaginary
          private static int x1, y1, xs, ys, xe, ye;
          private static double xstart, ystart, xende, yende, xzoom, yzoom;
          private static bool action, rectangle, finished;
          private static float xy;
          private Image picture;
          private Graphics g1;
          private Cursor c1, c2;
          //private HSB HSBcol=new HSB();
  
  
  
          public void init() // all instances will be prepared
          {
              //HSBcol = new HSB();
              this.Size = new Size(640,480);
              finished = false;
              //addMouseListener(this);
              //addMouseMotionListener(this);
              //c1 = new Cursor(Cursor.WAIT_CURSOR);
              //c2 = new Cursor(Cursor.CROSSHAIR_CURSOR);
              x1 = this.Width;
              y1 = this.Height;
              xy = (float)x1 / (float)y1;
              Bitmap img = new Bitmap(1, 1);
              g1 = Graphics.FromImage(img);
              finished = true;
  
          }
  
          public void destroy() // delete all instances 
          {
              if (finished)
              {
                  //removeMouseListener(this);
                  //removeMouseMotionListener(this);
                  picture = null;
                  g1 = null;
                  c1 = null;
                  c2 = null;
                  GC.Collect(); // garbage collection
              }
          }
  
          public void start()
          {
              action = false;
              rectangle = false;
              initvalues();
              xzoom = (xende - xstart) / (double)x1;
              yzoom = (yende - ystart) / (double)y1;
              mandelbrot();
          }
  
          public void stop()
          {
          }
  
          public void paint(Graphics g)
          {
              update(g); 
          }
  
          public void update(Graphics g)
          {
              g.DrawImage(picture, 0, 0);
              if (rectangle)
              {
                  Pen WhitePen = new Pen(Color.White);
                  if (xs &lt; xe)
                  {
                      if (ys &lt; ye) g.DrawRectangle(WhitePen, xs, ys, (xe - xs), (ye - ys));
                      else g.DrawRectangle(WhitePen, xs, ye, (xe - xs), (ys - ye));
                  }
                  else
                  {
                      if (ys &lt; ye) g.DrawRectangle(WhitePen, xe, ys, (xs - xe), (ye - ys));
                      else g.DrawRectangle(WhitePen, xe, ye, (xs - xe), (ys - ye));
                  }
              }
          }
  
          private void mandelbrot() // calculate all points
          {
              int x, y;
              float h, b, alt = 0.0f;
              Pen FractalPen;
  
  
              action = false;
              //SetCursor(c1);
              //showStatus("Mandelbrot-Set will be produced - please wait...");
              for (x = 0; x &lt; x1; x+=2)
                  for (y = 0; y &lt; y1; y++)
                  {
                      h = pointcolour(xstart + xzoom * (double)x, ystart + yzoom * (double)y); // color value
                      if (h != alt)
                      {
                          b = 1.0f - h * h; // brightnes
                          ///djm added
                          //HSBcol.fromHSB(h,0.8f,b); //convert hsb to rgb then make a Java Color
                          Color color = HSBColor.FromHSB(new HSBColor(h * 255, 0.8f * 255, b * 255));  // VERY IMPORTANT
                          //g1.setColor(col);
  
                          //djm end
                          //djm added to convert to RGB from HSB
  
                          //g1.setColor(Color.getHSBColor(h, 0.8f, b));
                          //djm test
                      //Color col = Color.getHSBColor(h,0.8f,b);
                      //int red = col.getRed();
                      //int green = col.getGreen();
                      //int blue = col.getBlue();
                          //djm 
                      alt = h;
                      FractalPen = new Pen(color);
                      g1.DrawLine(FractalPen, x, y, x + 1, y); 
                      }           
  
                  }
              //showStatus("Mandelbrot-Set ready - please select zoom area with pressed mouse.");
              //setCursor(c2);
              action = true;
          }
  
          private float pointcolour(double xwert, double ywert) // color value from 0.0 to 1.0 by iterations
          {
              double r = 0.0, i = 0.0, m = 0.0;
              int j = 0;
  
              while ((j &lt; MAX) &amp;&amp; (m &lt; 4.0))
              {
                  j++;
                  m = r * r - i * i;
                  i = 2.0 * r * i + ywert;
                  r = m + xwert;
              }
              return (float)j / (float)MAX;
          }
  
          private void initvalues() // reset start values
          {
              xstart = SX;
              ystart = SY;
              xende = EX;
              yende = EY;
              if ((float)((xende - xstart) / (yende - ystart)) != xy ) 
                  xstart = xende - (yende - ystart) * (double)xy;
          }
  
          /*public void mousePressed(MouseEvent e) 
          {
              e.consume();
              if (action)
              {
                  xs = e.getX();
                  ys = e.getY();
              }
          }
  
          public void mouseReleased(MouseEvent e)
          {
              int z, w;
  
              e.consume();
              if (action)
              {
                  xe = e.getX();
                  ye = e.getY();
                  if (xs &gt; xe)
                  {
                      z = xs;
                      xs = xe;
                      xe = z;
                  }
                  if (ys &gt; ye)
                  {
                      z = ys;
                      ys = ye;
                      ye = z;
                  }
                  w = (xe - xs);
                  z = (ye - ys);
                  if ((w &lt; 2) &amp;&amp; (z &lt; 2)) initvalues();
                  else
                  {
                      if (((float)w &gt; (float)z * xy)) ye = (int)((float)ys + (float)w / xy);
                      else xe = (int)((float)xs + (float)z * xy);
                      xende = xstart + xzoom * (double)xe;
                      yende = ystart + yzoom * (double)ye;
                      xstart += xzoom * (double)xs;
                      ystart += yzoom * (double)ys;
                  }
                  xzoom = (xende - xstart) / (double)x1;
                  yzoom = (yende - ystart) / (double)y1;
                  mandelbrot();
                  rectangle = false;
                  repaint();
              }
          }
  
          public void mouseEntered(MouseEvent e)
          {
          }
  
          public void mouseExited(MouseEvent e)
          {
          }
  
          public void mouseClicked(MouseEvent e) 
          {
          }
  
          public void mouseDragged(MouseEvent e)
          {
              e.consume();
              if (action)
              {
                  xe = e.getX();
                  ye = e.getY();
                  rectangle = true;
                  repaint();
              }
          }
  
          public void mouseMoved(MouseEvent e)
          {
          }
  
          public String getAppletInfo()
          {
              return "fractal.class - Mandelbrot Set a Java Applet by Eckhard Roessel 2000-2001";
          }*/
  
          }
      }
  </code></pre>