Exemple #1
0
        protected override void SetupRender()
        {
            _textClass = new List <TextClass>();
            _text      = TextMode == TextMode.Normal || TextSource == TextSource.MarkCollection
                                ? TextLines.Where(x => !String.IsNullOrEmpty(x)).ToList()
                                : SplitTextIntoCharacters(TextLines);

            if (TextSource != TextSource.None)
            {
                SetupMarks();
            }

            if (TargetPositioning == TargetPositioningType.Locations)
            {
                // Adjust the font size for Location support, default will ensure when swicthing between string and location that the Font will be the same visual size.
                // Font is further adjusted using the scale text slider.
                double newFontSize = ((StringCount - ((StringCount - Font.Size) / 100) * 100)) * ((double)BufferHt / StringCount);
                _font        = new Font(Font.FontFamily.Name, (int)newFontSize, Font.Style);
                _newFontSize = _font.Size;
                return;
            }
            double scaleFactor = ScalingTools.GetScaleFactor();

            _font        = new Font(Font.FontFamily, Font.Size / (float)scaleFactor, Font.Style);
            _newFontSize = _font.Size;
        }
Exemple #2
0
        private void InitialRender(int frame, Bitmap bitmap)
        {
            using (Graphics graphics = Graphics.FromImage(bitmap))
            {
                var text = TextMode == TextMode.Normal
                                        ? TextLines.Where(x => !String.IsNullOrEmpty(x)).ToList()
                                        : SplitTextIntoCharacters(TextLines);
                int numberLines = text.Count();

                SizeF textsize = new SizeF(0, 0);

                foreach (string t in text)
                {
                    if (!String.IsNullOrEmpty(t))
                    {
                        var size = graphics.MeasureString(t, _font);
                        if (size.Width > textsize.Width)
                        {
                            textsize = size;
                        }
                    }
                }
                _maxTextSize = Convert.ToInt32(textsize.Width * .95);
                var intervalPos       = GetEffectTimeIntervalPosition(frame);
                var intervalPosFactor = intervalPos * 100;
                int maxht             = Convert.ToInt32(textsize.Height * numberLines);
                int xOffset           = CalculateXOffset(intervalPosFactor);
                int yOffset           = CalculateYOffset(intervalPosFactor);
                switch (Direction)
                {
                case TextDirection.Left:
                case TextDirection.Right:
                    xOffset = 0;
                    break;

                case TextDirection.Up:
                case TextDirection.Down:
                    yOffset = 0;
                    break;
                }
                int    offsetLeft       = (((BufferWi - _maxTextSize) / 2) * 2 + xOffset) / 2;
                int    offsetTop        = (((BufferHt - maxht) / 2) * 2 + yOffset) / 2;
                double intervalPosition = (GetEffectTimeIntervalPosition(frame) * Speed) % 1;
                Point  point;

                switch (Direction)
                {
                case TextDirection.Left:
                    // left
                    int leftX = BufferWi - (int)(intervalPosition * (textsize.Width + BufferWi));

                    point =
                        new Point(Convert.ToInt32(CenterStop ? Math.Max(leftX, (BufferWi - (int)textsize.Width) / 2) : leftX), offsetTop);

                    DrawText(text, graphics, point);

                    break;

                case TextDirection.Right:
                    // right
                    int rightX = -_maxTextSize + (int)(intervalPosition * (_maxTextSize + BufferWi));

                    point =
                        new Point(Convert.ToInt32(CenterStop ? Math.Min(rightX, (BufferWi - (int)textsize.Width) / 2) : rightX),
                                  offsetTop);
                    DrawText(text, graphics, point);
                    break;

                case TextDirection.Up:
                    // up
                    int upY = BufferHt - (int)(((textsize.Height * numberLines) + BufferHt) * intervalPosition);

                    point = new Point(offsetLeft,
                                      Convert.ToInt32(CenterStop ? Math.Max(upY, (BufferHt - (int)(textsize.Height * numberLines)) / 2) : upY));
                    DrawText(text, graphics, point);
                    break;

                case TextDirection.Down:
                    // down
                    int downY = -(int)(textsize.Height * numberLines) +
                                (int)(((textsize.Height * numberLines) + BufferHt) * intervalPosition);

                    point = new Point(offsetLeft,
                                      Convert.ToInt32(CenterStop
                                                                ? Math.Min(downY, (BufferHt - (int)(textsize.Height * numberLines)) / 2)
                                                                : downY));
                    DrawText(text, graphics, point);
                    break;

                default:
                    // no movement - centered
                    point = new Point(((BufferWi - _maxTextSize) / 2) + xOffset, offsetTop);
                    DrawText(text, graphics, point);
                    break;
                }
            }
        }
Exemple #3
0
        private void InitialRender(int frame, Bitmap bitmap)
        {
            var intervalPos       = GetEffectTimeIntervalPosition(frame);
            var intervalPosFactor = intervalPos * 100;
            var textAngle         = CalculateAngle(intervalPosFactor);

            using (Graphics graphics = Graphics.FromImage(bitmap))
            {
                var text = TextMode == TextMode.Normal
                                        ? TextLines.Where(x => !String.IsNullOrEmpty(x)).ToList()
                                        : SplitTextIntoCharacters(TextLines);
                int numberLines = text.Count();

                SizeF textsize = new SizeF(0, 0);

                //Adjust Font Size based on the Font scaling factor
                _newFontSize = _font.SizeInPoints * (CalculateFontScale(intervalPosFactor) / 100);
                _newfont     = new Font(Font.FontFamily.Name, _newFontSize, Font.Style);

                foreach (string t in text)
                {
                    if (!String.IsNullOrEmpty(t))
                    {
                        var size = graphics.MeasureString(t, _newfont);
                        if (size.Width > textsize.Width)
                        {
                            textsize = size;
                        }
                    }
                }

                _maxTextSize = Convert.ToInt32(textsize.Width * .95);
                int maxht = Convert.ToInt32(textsize.Height * numberLines);

                int xOffset = CalculateXOffset(intervalPosFactor);
                int yOffset = CalculateYOffset(intervalPosFactor);

                //Rotate the text based off the angle setting
                if (Direction == TextDirection.Rotate)
                {
                    //move rotation point to center of image
                    graphics.TranslateTransform((float)(bitmap.Width / 2 + xOffset), (float)(bitmap.Height / 2 + (yOffset / 2)));
                    //rotate
                    graphics.SmoothingMode = SmoothingMode.HighQuality;
                    graphics.RotateTransform(textAngle);
                    //move image back
                    graphics.TranslateTransform(-(float)(bitmap.Width / 2 + xOffset), -(float)(bitmap.Height / 2 + (yOffset / 2)));
                }

                switch (Direction)
                {
                case TextDirection.Left:
                case TextDirection.Right:
                    xOffset = 0;
                    break;

                case TextDirection.Up:
                case TextDirection.Down:
                    yOffset = 0;
                    break;
                }
                int    offsetLeft       = (((BufferWi - _maxTextSize) / 2) * 2 + xOffset) / 2;
                int    offsetTop        = (((BufferHt - maxht) / 2) * 2 + yOffset) / 2;
                double intervalPosition = (GetEffectTimeIntervalPosition(frame) * Speed) % 1;
                Point  point;

                switch (Direction)
                {
                case TextDirection.Left:
                    // left
                    int leftX = BufferWi - (int)(intervalPosition * (textsize.Width + BufferWi));

                    point =
                        new Point(Convert.ToInt32(CenterStop ? Math.Max(leftX, (BufferWi - (int)textsize.Width) / 2) : leftX), offsetTop);

                    DrawText(text, graphics, point);

                    break;

                case TextDirection.Right:
                    // right
                    int rightX = -_maxTextSize + (int)(intervalPosition * (_maxTextSize + BufferWi));

                    point =
                        new Point(Convert.ToInt32(CenterStop ? Math.Min(rightX, (BufferWi - (int)textsize.Width) / 2) : rightX),
                                  offsetTop);
                    DrawText(text, graphics, point);
                    break;

                case TextDirection.Up:
                    // up
                    int upY = BufferHt - (int)(((textsize.Height * numberLines) + BufferHt) * intervalPosition);

                    point = new Point(offsetLeft,
                                      Convert.ToInt32(CenterStop ? Math.Max(upY, (BufferHt - (int)(textsize.Height * numberLines)) / 2) : upY));
                    DrawText(text, graphics, point);
                    break;

                case TextDirection.Down:
                    // down
                    int downY = -(int)(textsize.Height * numberLines) +
                                (int)(((textsize.Height * numberLines) + BufferHt) * intervalPosition);

                    point = new Point(offsetLeft,
                                      Convert.ToInt32(CenterStop
                                                                ? Math.Min(downY, (BufferHt - (int)(textsize.Height * numberLines)) / 2)
                                                                : downY));
                    DrawText(text, graphics, point);
                    break;

                default:
                    // no movement - centered
                    point = new Point((BufferWi - _maxTextSize) / 2 + xOffset, offsetTop);
                    DrawText(text, graphics, point);
                    break;
                }
            }
        }
Exemple #4
0
        protected override void RenderEffect(int frame, ref PixelFrameBuffer frameBuffer)
        {
            using (var bitmap = new Bitmap(BufferWi, BufferHt))
            {
                using (Graphics graphics = Graphics.FromImage(bitmap))
                {
                    var text        = TextMode == TextMode.Normal ? TextLines.Where(x => !String.IsNullOrEmpty(x)).ToList() : SplitTextIntoCharacters(TextLines);
                    int numberLines = text.Count();

                    SizeF textsize = new SizeF(0, 0);

                    foreach (string t in text)
                    {
                        if (!String.IsNullOrEmpty(t))
                        {
                            var size = graphics.MeasureString(t, Font);
                            if (size.Width > textsize.Width)
                            {
                                textsize = size;
                            }
                        }
                    }
                    _maxTextSize = Convert.ToInt32(textsize.Width * .95);
                    int    maxht            = Convert.ToInt32(textsize.Height * numberLines);
                    int    offsetLeft       = (((BufferWi - _maxTextSize) / 2) * 2 + Position) / 2;
                    int    offsetTop        = (((BufferHt - maxht) / 2) * 2 + Position) / 2;
                    double intervalPosition = (GetEffectTimeIntervalPosition(frame) * Speed) % 1;
                    Point  point;

                    switch (Direction)
                    {
                    case TextDirection.Left:
                        // left
                        int leftX = BufferWi - (int)(intervalPosition * (textsize.Width + BufferWi));

                        point =
                            new Point(Convert.ToInt32(CenterStop ? Math.Max(leftX, (BufferWi - (int)textsize.Width) / 2) : leftX), offsetTop);

                        DrawText(text, graphics, point);

                        break;

                    case TextDirection.Right:
                        // right
                        int rightX = -_maxTextSize + (int)(intervalPosition * (_maxTextSize + BufferWi));

                        point =
                            new Point(Convert.ToInt32(CenterStop ? Math.Min(rightX, (BufferWi - (int)textsize.Width) / 2) : rightX), offsetTop);
                        DrawText(text, graphics, point);
                        break;

                    case TextDirection.Up:
                        // up
                        int upY = BufferHt - (int)(((textsize.Height * numberLines) + BufferHt) * intervalPosition);

                        point = new Point(offsetLeft,
                                          Convert.ToInt32(CenterStop ? Math.Max(upY, (BufferHt - (int)(textsize.Height * numberLines)) / 2): upY));
                        DrawText(text, graphics, point);
                        break;

                    case TextDirection.Down:
                        // down
                        int downY = -(int)(textsize.Height * numberLines) + (int)(((textsize.Height * numberLines) + BufferHt) * intervalPosition);

                        point = new Point(offsetLeft,
                                          Convert.ToInt32(CenterStop
                                                                        ? Math.Min(downY, (BufferHt - (int)(textsize.Height * numberLines)) / 2)
                                                                        : downY));
                        DrawText(text, graphics, point);
                        break;

                    default:
                        // no movement - centered
                        point = new Point(((BufferWi - _maxTextSize) / 2) + PositionX, offsetTop);
                        DrawText(text, graphics, point);
                        break;
                    }

                    // copy to frameBuffer
                    for (int x = 0; x < BufferWi; x++)
                    {
                        for (int y = 0; y < BufferHt; y++)
                        {
                            Color color = bitmap.GetPixel(x, BufferHt - y - 1);

                            if (!EmptyColor.Equals(color))
                            {
                                var hsv = HSV.FromRGB(color);
                                hsv.V = hsv.V * LevelCurve.GetValue(GetEffectTimeIntervalPosition(frame) * 100) / 100;
                                frameBuffer.SetPixel(x, y, hsv);
                            }
                        }
                    }
                }
            }
        }