public Color[,] RenderEffect(Color[,] buffer, Color[] palette, int eventToRender) { const int speedFactor = 200; var bufferHeight = buffer.GetLength(Utils.IndexRowsOrHeight); var bufferWidth = buffer.GetLength(Utils.IndexColsOrWidth); Color color; var hsv2 = new HSV(); var colorcnt = palette.Length; var cycleLen = colorcnt * speedFactor; var count = tbCount.Value; if (eventToRender > (colorcnt - 1) * speedFactor * count && count < 10) { color = palette.GetMultiColorBlend(count % 2, false); } else { color = palette.GetMultiColorBlend(eventToRender % cycleLen / (double)cycleLen, true); } var hsv = color.ToHSV(); var halfHeight = (bufferHeight - 1) / 2.0; var halfWidth = (bufferWidth - 1) / 2.0; for (var col = 0; col < bufferWidth; col++) { for (var row = 0; row < bufferHeight; row++) { hsv2.SetToHSV(hsv); if (chkBoxHFade.Checked) hsv2.Value *= (float)(1.0 - Math.Abs(halfWidth - col) / halfWidth); if (chkBoxVFade.Checked) hsv2.Value *= (float)(1.0 - Math.Abs(halfHeight - row) / halfHeight); buffer[row, col] = hsv2.ToColor(); } } return buffer; }
public Color[,] RenderEffect(Color[,] buffer, Color[] palette, int eventToRender) { var colorCount = palette.Length; var spiralCount = colorCount * tbPaletteRepeat.Value; var bufferHeight = buffer.GetLength(Utils.IndexRowsOrHeight); var bufferWidth = buffer.GetLength(Utils.IndexColsOrWidth); var deltaStrands = bufferWidth / spiralCount; var spiralThickness = (deltaStrands * tbThickness.Value / 100) + 1; long spiralState = eventToRender * tbDirection.Value; for (var spiral = 0; spiral < spiralCount; spiral++) { var strandBase = spiral * deltaStrands; var color = palette[spiral % colorCount]; for (var thickness = 0; thickness < spiralThickness; thickness++) { var strand = (strandBase + thickness) % bufferWidth; for (var row = 0; row < bufferHeight; row++) { var column = (strand + ((int)spiralState / 10) + (row * tbRotations.Value / bufferHeight)) % bufferWidth; if (column < 0) { column += bufferWidth; } if (chkBoxBlend.Checked) { color = palette.GetMultiColorBlend((bufferHeight - row - 1) / (double)bufferHeight, false); } if (chkBox3D.Checked) { var hsv = color.ToHSV(); hsv.Value = (float)((double)(tbRotations.Value < 0 ? thickness + 1 : spiralThickness - thickness) / spiralThickness); color = hsv.ToColor(); } buffer[row, column] = color; } } } return buffer; }
private Color GetMultiColor(Color[] palette) { return palette.GetMultiColorBlend(_random.Next(100) / 100.0, false); }
public Color[,] RenderEffect(Color[,] buffer, Color[] palette, int eventToRender) { var rows = buffer.GetLength(Utils.IndexRowsOrHeight); var columns = buffer.GetLength(Utils.IndexColsOrWidth); var pixelSpacing = tbSpacing.Value * rows / 100 + 3; var limit = rows * pixelSpacing * 4; var garlandsState = (limit - (eventToRender % limit)) / 4; for (var ring = 0; ring < rows; ring++) { var ratio = ring / (double) rows; var color = palette.GetMultiColorBlend(ratio, false); var intialRow = garlandsState - ring * pixelSpacing; for (var column = 0; column < columns; column++) { var row = intialRow; switch (tbGarlandType.Value) { case 1: switch (column % 5) { case 2: row -= 2; break; case 1: case 3: row -= 1; break; } break; case 2: switch (column % 5) { case 2: row -= 4; break; case 1: case 3: row -= 2; break; } break; case 3: switch (column % 6) { case 3: row -= 6; break; case 2: case 4: row -= 4; break; case 1: case 5: row -= 2; break; } break; case 4: switch (column % 5) { case 1: case 3: row -= 2; break; } break; } if (row < rows - ring - 1) { row = rows - ring - 1; } if (row < rows) { buffer[row, column] = color; } } } return buffer; }
public Color[,] RenderEffect(Color[,] buffer, Color[] palette, int eventToRender) { var h = 0.0; var bufferHeight = buffer.GetLength(Utils.IndexRowsOrHeight); var bufferWidth = buffer.GetLength(Utils.IndexColsOrWidth); var hsv = new HSV(); var maxframe = bufferHeight*2; var frame = (int) ((bufferHeight*(double) eventToRender/200.0)%maxframe); var offset = eventToRender/100.0; for (var col = 0; col < bufferWidth; col++) { for (var row = 0; row < bufferHeight; row++) { double x1; double y1; double f; switch (tbStyle.Value) { case 1: var n = Math.Abs((col*col - row*row)* Math.Sin(offset + ((col + row)*Pi2/(bufferHeight + bufferWidth)))); var d = col*col + row*row + 1; h = n/d; break; case 2: f = (frame < maxframe/2) ? frame + 1 : maxframe - frame; x1 = (col - bufferWidth/2.0)/f; y1 = (row - bufferHeight/2.0)/f; h = Math.Sqrt(x1*x1 + y1*y1); break; case 3: f = (frame < maxframe/2) ? frame + 1 : maxframe - frame; f = f*0.1 + bufferHeight/60.0; x1 = (col - bufferWidth/2.0)/f; y1 = (row - bufferHeight/2.0)/f; h = Math.Sin(x1)*Math.Cos(y1); break; } hsv.Saturation = 1.0f; hsv.Value = 1.0f; var chunks = tbChunks.Value; var skip = tbSkip.Value; if (chunks > 1 && ((int) (h*chunks))%skip == 0) { continue; } Color color; if (cbColors.SelectedIndex == 0) { hsv.Hue = (float) h; color = hsv.ToColor(); } else { color = palette.GetMultiColorBlend(h, false); } buffer[row, col] = color; } } return buffer; }