private async Task CalculateBitmapPart(Bitmap bitmap, int fromHeight, int toHeight, Additional.DrawMode drawMode) { int width = bitmap.Width; double xmin = -1.5; double ymin = -1.2; double xmax = 1.5; double ymax = 1.5; double p = 0.32, q = 0.04; int W = 600; int H = 600; double dx = (xmax - xmin) / (W - 1); double dy = (ymax - ymin) / (H - 1); double x, y, X, Y, Cx, Cy; for (int ax = fromHeight; ax < toHeight; ax++) { for (int bx = 0; bx < width; bx++) { x = xmin + ax * dx; y = ymin + bx * dy; Cx = x; Cy = y; X = x; Y = y; double ix = 0, iy = 0, n = 0; while ((ix * ix + iy * iy < 4) && (n < 64)) { switch (drawMode) { case Additional.DrawMode.Standard: ix = X * X - Y * Y + Cx; iy = 2 * X * Y + Cy; break; case Additional.DrawMode.Custom: ix = X * X - Y * Y - p * p * p + 3 * p * q; iy = 2 * X * Y - 3 * q * p * p + p * p * p; break; } n++; X = ix; Y = iy; } n = 255 - n; Color color = Color.FromArgb((int)n, (int)n, (int)n); bitmap.SetPixel(bx, ax, color); } } using (Bitmap cpy = (Bitmap)bitmap.Clone()) { texture.Destroy(openGLControl.OpenGL); texture.Create(openGLControl.OpenGL, cpy); } await Task.Yield(); }
private void modeComboBox_SelectedIndexChanged(object sender, System.EventArgs e) => drawMode = (Additional.DrawMode)modeComboBox.SelectedIndex;