示例#1
0
        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;
        }
示例#2
0
文件: Spirals.cs 项目: jmcadams/vplus
        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;
        }
示例#3
0
文件: Life.cs 项目: jmcadams/vplus
 private Color GetMultiColor(Color[] palette)
 {
     return palette.GetMultiColorBlend(_random.Next(100) / 100.0, false);
 }
示例#4
0
        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;
        }
示例#5
0
        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;
        }