/// <summary>
        /// Creates the captcha image.
        /// </summary>
        public byte[] DrawCaptcha(string message, string foreColor, float fontSize, string fontName)
        {
            return(useFont(fontName, fontSize, captchaFont =>
            {
                var fColor = ColorTranslator.FromHtml(foreColor);
                message = message.Replace(",", string.Empty, StringComparison.Ordinal);
                const int margin = 8;
                var captchaSize = measureString(message, captchaFont);
                var height = (int)captchaSize.Height + margin;
                var width = (int)captchaSize.Width + margin;

                using var pic = new Bitmap(width, height, PixelFormat.Format24bppRgb);
                var data = pic.LockBits(new Rectangle(0, 0, pic.Width, pic.Height), ImageLockMode.WriteOnly, pic.PixelFormat);
                var noise = new byte[data.Width * data.Height * 3];
                _randomNumberProvider.NextBytes(noise);
                Marshal.Copy(noise, 0, data.Scan0, noise.Length);
                pic.UnlockBits(data);
                using (var graphics = Graphics.FromImage(pic))
                {
                    var stringFormat = new StringFormat
                    {
                        Alignment = StringAlignment.Center,
                        LineAlignment = StringAlignment.Center
                    };
                    graphics.DrawString(message, captchaFont, new SolidBrush(fColor), new RectangleF(0, 0, pic.Width, pic.Height), stringFormat);

                    for (var i = 0; i < 30; i++)
                    {
                        var x0 = _randomNumberProvider.NextNumber(0, width);
                        var y0 = _randomNumberProvider.NextNumber(0, height);
                        var x1 = _randomNumberProvider.NextNumber(0, width);
                        var y1 = _randomNumberProvider.NextNumber(0, height);
                        graphics.DrawLine(Pens.White, x0, y0, x1, y1);
                    }
                }

                using var stream = new MemoryStream();
                distortImage(height, width, pic);
                pic.Save(stream, ImageFormat.Png);
                return stream.ToArray();
            }));
        }