Загрузка...

Почему может быть такая ошибка?

Тема в разделе C# создана пользователем Minin_inactive4471240 12 мар 2022. 188 просмотров

  1. Minin_inactive4471240
    Minin_inactive4471240 Автор темы 12 мар 2022 3 5 сен 2021
    [IMG] вот так на картинку вписывается текст.

    Код

    public static void Pechat()
    {
    string FirstText = "привет Лолзтим, ты крут";
    string[] array = FirstText.Split(' ');
    int counterOfWords = 0;
    float horizontal = 250;
    float verticalForChertej = 150;

    float horizontal1 = 260;
    float vertica1l = 135;

    float horizontal2 = 120;
    float vertical2 = 150;

    int x = 20;

    for (int i = 0; i < array.Length; i++)
    {
    counterOfWords++;
    }
    if (counterOfWords > 2)
    {
    int counter = 0;

    Image img = Bitmap.FromFile(@"D:\scriptscheats\sert.jpg");
    for (int i = 0; i < counterOfWords; i++)
    {

    if (counter < 7)
    {
    ++counter;
    Graphics graph = Graphics.FromImage(img);
    graph.DrawString(array[i], new Font("MS Reference Sans Serif", (float)6.5), new SolidBrush(Color.Gray), horizontal1, vertica1l);
    horizontal1 += 35;
    graph = null;
    //img = null;
    }
    else
    {
    Graphics graph = Graphics.FromImage(img);
    graph.DrawString(array[i], new Font("MS Reference Sans Serif", (float)6.5), new SolidBrush(Color.Gray), horizontal2, vertical2);
    horizontal2 += 25;
    graph = null;

    }

    }
    img.Save(@"D:\scriptscheats\sert" + "1" + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
    MessageBox.Show("Выполнено");
    }
    else if (counterOfWords <= 2)
    {
    Image img = Bitmap.FromFile(@"D:\scriptscheats\sert.jpg");
    for (int i = 0; i < counterOfWords; i++)
    {
    Graphics graph = Graphics.FromImage(img);
    graph.DrawString(array[i], new Font("MS Reference Sans Serif", (float)6.5), new SolidBrush(Color.Gray), horizontal1, vertica1l);
    horizontal1 += 25;
    graph = null;
    //img = null;

    MessageBox.Show("Выполнено");
    }
    img.Save(@"D:\scriptscheats\sert" + "1" + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
    }

    }
     
  2. Minin_inactive4471240
    Minin_inactive4471240 Автор темы 12 мар 2022 3 5 сен 2021
    Minin_inactive4471240, Условие такого, что если в тесте больше 7 слов, то текст переносится на другую строчку смещением vertical += 25
    --- Сообщение объединено с предыдущим 12 мар 2022
    Но текст всё равно по-дурацки пишется, хоть horizontal ставь 35
     
  3. vtlstolyarov
    vtlstolyarov 12 мар 2022 474 8 янв 2022
    Чел, ты жжешь :)
    Код
    for (int i = 0; i < array.Length; i++)
    {
    counterOfWords++;
    }
     
    1. Посмотреть предыдущие комментарии (3)
    2. vtlstolyarov
      Minin_inactive4471240, Ни на что не влияет, просто взгляд зацепился. Ты бы объяснил в чём именно проблема, а то нихера не понятно чего ты хочешь добиться. И повторяющийся код с рисованием вынеси в параметрируемый метод, тоже сильно облегчит понимание кода.
    3. Minin_inactive4471240 Автор темы
      vtlstolyarov, добиться я хочу того, чтобы слова при нанесении на картинку не налазили друг на друга, как у меня получается
    4. vtlstolyarov
      Minin_inactive4471240, так?
      C#
      public static void Pechat()
      {
      var imagePath = @"D:\scriptscheats\sert.jpg";
      using (Image img = Bitmap.FromFile(imagePath))
      {
      Write(img, "привет Лолзтим, ты крут. Причём не просто крут, а супер-пупер-охуенно крут", new Rectangle(260, 135, 100, 15));
      img.Save(System.IO.Path.ChangeExtension(imagePath, "1.jpg"), System.Drawing.Imaging.ImageFormat.Jpeg);
      }
      MessageBox.Show("Выполнено");
      }

      private static void Write(Image image, string text, Rectangle firstLine)
      {
      using (Font font = new Font("MS Reference Sans Serif", 6.5f))
      using (Brush brush = new SolidBrush(Color.Gray))
      using (Graphics graphics = Graphics.FromImage(image))
      {
      var words = new Queue<string>(text.Split(' '));
      for (var y = firstLine.Y; words.Any(); y += firstLine.Height)
      {
      var lineText = words.Dequeue();
      for (var tryText = lineText; words.Any() && graphics.MeasureString(tryText += " " + words.Peek(), font).Width < firstLine.Width; words.Dequeue())
      {
      lineText = tryText;
      }
      graphics.DrawString(lineText, font, brush, firstLine.X, y);
      }
      }
      }
Загрузка...
Top