1. C# / Говнокод #8515

    +123

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    static public int MeasureDisplayStringWidth(Graphics graphics, string text,
                                                Font font)
    {
        const int width = 32;
    
        System.Drawing.Bitmap   bitmap = new System.Drawing.Bitmap (width, 1, 
                                                                    graphics);
        System.Drawing.SizeF    size   = graphics.MeasureString (text, font);
        System.Drawing.Graphics anagra = System.Drawing.Graphics.FromImage(bitmap);
    
        int measured_width = (int) size.Width;
    
        if (anagra != null)
        {
            anagra.Clear (Color.White);
            anagra.DrawString (text+"|", font, Brushes.Black,
                               width - measured_width, -font.Height / 2);
    
            for (int i = width-1; i >= 0; i--)
            {
                measured_width--;
                if (bitmap.GetPixel (i, 0).R != 255)    // found a non-white pixel ?
    
                    break;
            }
        }
    
        return measured_width;
    }

    Ищем размер нарисованной строки. Не моё. Нашел на codeproject.
    (Вместо MeasureCharacterRanges)

    Запостил: rammara, 14 Ноября 2011

    Комментарии (13) RSS

    • может, когда писали это, другого способа не было
      Ответить
      • MeasureCharacterRanges был с 1-й версии.
        Ответить
        • если это заглушка поверху GetTextExtent(), то это не то.

          http://www.codeproject.com/KB/GDI/italicText.aspx

          ГК сверху это метод как посчитать *настоящую* длину нарисованого текста, со всеми причиндалами, которые шрифты могут включать. иначе, на пример при копировании из картинки в картинку, будут части шрифта обрезатся.

          говно, но в самих виндах.
          Ответить
          • наоборот, сопроводиловка демонстрирует высчитанные rect который больше настоящей™ (не знаю как на хинди) длины отрисованной строки
            Ответить
    • Ахаха, да-да, я тоже видел эту ангару, даже запостить хотел
      Ответить
    • То, кто постится на CodeProject - это лютый пи.. звездец. Ни одного нормального проекта там не видел. Здесь можно просто ссылку на сайт оставить, не ошибётесь, и заплюсуют ещё.
      Ответить
      • Сколько я оттуда накопипастил гыыыы.
        Ответить
        • Мне по Objective-C и iOS гугл периодически ссылки на http://www.roseindia.net/ кидает. Судя по коду - это именно то, о чём приходит мысль при чтении ссылки.
          Ответить
    • показать все, что скрытоvanished
      Ответить

    Добавить комментарий