Вынос текста из TEXBOX В отдельную картинку

Есть код который делает QR картинку и сохраняет её с текстом в формате

Было

Реализация классная Очень хорошо работает. Но я хочу связать новый Textbox В который будет писаться инф.

А располагать его в числовом формате в самом низу.

введите сюда описание изображения

Посоветуйте как сделать лучше?

    private Bitmap ConvertTextToImage(string txt, string fontname, int fontsize, Color bgcolor, Color fcolor, int width, int height)
    {
        var bmp = new Bitmap(181, 81);

        using (var graphics = Graphics.FromImage(bmp))
        {
            var font = new Font("Arial", 10.0f);
            graphics.FillRectangle(new SolidBrush(bgcolor), 0, 0, bmp.Width, bmp.Height);
            graphics.DrawString(txt, font, new SolidBrush(fcolor), new RectangleF(0, 0, bmp.Width, bmp.Height));
        }

        return bmp;
    }
    private Bitmap ConvertTextToImage1(string txt, string fontname, int fontsize, Color bgcolor, Color fcolor, int width, int height)
    {
        var bmp = new Bitmap(181, 30);

        using (var graphics = Graphics.FromImage(bmp))
        {
            var font = new Font("Bookman Old Style", 18.0f);
            graphics.FillRectangle(new SolidBrush(bgcolor), 0, 0, bmp.Width, bmp.Height);
            graphics.DrawString(txt, font, new SolidBrush(fcolor), new RectangleF(0, 0, bmp.Width, bmp.Height));
        }

        return bmp;
    }

    private Bitmap MergeHorizontal(Bitmap bmp1, Bitmap bmp2)
    {
        var res = new Bitmap(bmp1.Width + bmp2.Width, Math.Max(bmp1.Height, bmp2.Height));

        using (var graphics = Graphics.FromImage(res))
        {
            graphics.DrawImage(bmp1, Point.Empty);
            graphics.DrawImage(bmp2, new Point(bmp1.Width, 0));
        }

        return res;
    }

    private Bitmap MergeVertical(Bitmap bmp1, Bitmap bmp2)
    {
        var res = new Bitmap(bmp1.Width + bmp2.Width, Math.Max(bmp1.Height, bmp2.Height));

        using (var graphics = Graphics.FromImage(res))
        {
            graphics.DrawImage(bmp1, Point.Empty);
            graphics.DrawImage(bmp2, new Point(bmp1.Width, 0));
        }

        return res;
    }

    private void button5_Click(object sender, EventArgs e)
    {
        using (SaveFileDialog dialog = new SaveFileDialog())
        {
            dialog.Filter = "JPEG files (*.jpg, *.jpeg, *.jpe, *.jfif) | *.jpg; *.jpeg; *.jpe; *.jfif";
            dialog.FilterIndex = 2;
            dialog.RestoreDirectory = true;

            if (dialog.ShowDialog() == DialogResult.OK)
            {
                string savepath = dialog.FileName;

                var bmp1 = (Bitmap)pictureBox1.Image;
                var bmp2 = ConvertTextToImage(textBox1.Text, "Bookman Old Style", 10, Color.White, Color.Black, 180, 100);
                bmp2.RotateFlip(RotateFlipType.Rotate270FlipNone);
                var bmp3 = ConvertTextToImage1(textBox2.Text, "Bookman Old Style", 15, Color.White, Color.Black, 180, 100);
                bmp3.RotateFlip(RotateFlipType.Rotate270FlipNone);
                Bitmap result = MergeHorizontal(bmp1, bmp2);
                result = MergeVertical(result, bmp3);
                result.Save(savepath);
            }
        }
    }

Ответы (1 шт):

Автор решения: aepot

Я не знаю, в чем вы здесь запутались. НО да, у вас какая-то мешанина из методов получилась.

private Bitmap ConvertTextToImage(string txt, string fontname, int fontsize, Color bgcolor, Color fcolor, int width, int height)
{
    var bmp = new Bitmap(width, height);

    using (var graphics = Graphics.FromImage(bmp))
    {
        var font = new Font(fontname, fontsize);
        graphics.FillRectangle(new SolidBrush(bgcolor), 0, 0, bmp.Width, bmp.Height);
        graphics.DrawString(txt, font, new SolidBrush(fcolor), new RectangleF(0, 0, bmp.Width, bmp.Height));
    }

    return bmp;
}

private Bitmap Merge(Bitmap bmp1, Bitmap bmp2)
{
    var res = new Bitmap(bmp1.Width + bmp2.Width, Math.Max(bmp1.Height, bmp2.Height));

    using (var graphics = Graphics.FromImage(res))
    {
        graphics.DrawImage(bmp1, Point.Empty);
        graphics.DrawImage(bmp2, new Point(bmp1.Width, 0));
    }

    return res;
}

private void button5_Click(object sender, EventArgs e)
{
    using (SaveFileDialog dialog = new SaveFileDialog())
    {
        dialog.Filter = "JPEG files (*.jpg, *.jpeg, *.jpe, *.jfif) | *.jpg; *.jpeg; *.jpe; *.jfif";
        dialog.FilterIndex = 2;
        dialog.RestoreDirectory = true;

        if (dialog.ShowDialog() == DialogResult.OK)
        {
            string savepath = dialog.FileName;

            var bmp1 = (Bitmap)pictureBox1.Image;
            var bmp2 = ConvertTextToImage(textBox1.Text, "Bookman Old Style", 10, Color.White, Color.Black, 181, 30);
            bmp2.RotateFlip(RotateFlipType.Rotate270FlipNone);
            var bmp3 = ConvertTextToImage(textBox2.Text, "Bookman Old Style", 15, Color.White, Color.Black, 181, 30);
            bmp3.RotateFlip(RotateFlipType.Rotate270FlipNone);
            Bitmap result = Merge(bmp1, bmp2);
            result = Merge(result, bmp3);
            result.Save(savepath, ImageFormat.Jpeg);
        }
    }
}
→ Ссылка