1. Java / Говнокод #15661

    +65

    1. 1
    2. 2
    3. 3
    4. 4
    Graphics2D g = ...;
    String str = "Some string";
    FontRenderContext frc = g.getFontRenderContext();
    double height = g.getFont().createGlyphVector(frc, str).getPixelBounds(null, 0, 0).getHeight();

    Мне нужно было узнать точную высоту строки, которую я рисую на объекте Image. Спасибо stackoverflow за то, что он есть, по-моему, до этого способа просто невозможно догадаться, даже копая документацию, за несколько часов...

    Запостил: evg_ever, 03 Апреля 2014

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

    • g.getFontMetrics().getHeight()?
      а вообще, когда рисуем текст, может пригодиться TextLayout. например, так:
      private void drawScore(final Graphics2D g2d, final Rectangle2D rect,
                  final String score) {
              g2d.setColor(this.scoreColor);
              final TextLayout tl = new TextLayout(score, this.getFont(), g2d
                      .getFontMetrics(this.getFont()).getFontRenderContext());
              final Rectangle2D tlb = tl.getBounds();
              final AffineTransform tx = AffineTransform.getTranslateInstance(
                      -tlb.getX(), -tlb.getY());
              Shape s = tl.getOutline(tx);
              s = AffineTransform.getScaleInstance(rect.getWidth() / tlb.getWidth(),
                      rect.getHeight() / tlb.getHeight()).createTransformedShape(s);
              s = AffineTransform.getTranslateInstance(rect.getX(), rect.getY())
                      .createTransformedShape(s);
              g2d.fill(s);
          }
      Ответить
      • Просто getHeight() возвращает высоту, которая больше необходимой для данной строки. А мне нужно было точное значение

        С TextLayout тоже гемор. Мне просто непонятно, почему в FontMetrics есть метод для вычисления ширины строки и нет метода для высоты...
        Ответить
        • весь гемор именно из-за принятой концепции "базовой линии", т.е. как бы всем должно быть наплевать за свисающие "носики" и "хвостики" и прочие умляуты сверху.
          Ответить
    • Тонко. А в дельфях у объекта канвы эти свойства есть ;)
      Ответить
    • Стертор, не верю я твоим +10 )
      Ответить
      • Да, верится с трудом.
        Ответить
        • Кстати, а кто Борманду по -1 ставит во всех обсуждаемых постах?
          Ответить
          • Это помехи.
            Ответить
            • Вас минусует тот же человек,который ставит мне минусы. Я точно знаю.
              Ответить
              • > тот же человек
                Возможно вы имели в виду "тот же бот" :)
                Ответить
          • Если что, мои боты не мелочатся по единичке, или пачкой +-10 или ничего вообще.
            Ответить
            • Кстати
              Ответить
              • нужно добавить в бот функцию рандомного голосования, с возможностью выбора кол-ва оценок. Кроме того, я добавил функцию минусования всех топиков участника - можно в считанные мгновения утопить все его треды(ну, например, возможно использование против беспредела конардо)
                Ответить
                • показать все, что скрытоАххуеть, товарищи
                  Ответить
                  • Сейчас я добавлю функцию разминусовывания всех заминусованных постов ;) Веселье впереди.

                    p.s. А кое-кто изрядно соснет хуйцаец.
                    Ответить
                    • показать все, что скрытоНе обижайтесь, товарищи. Я создал столько постов, чтобы тестировать бот. Этот тред в любом случае лажа, так или иначе.
                      Вот только один злобный человек подпортил мне дело. Придется вычитать по единичке.
                      Ответить
                    • > добавлю функцию разминусовывания всех заминусованных постов
                      Так посты уже не вернуть из Великого Забытья в отличие от утопленных комментариев :'(
                      Ответить
                      • Ну вот и отличный rage quit - заминусовать все посты, чтобы движок их вынес, и с улыбкой на лице помахать платочком.
                        Ответить
        • > Да, верится с трудом.
          и вообще,
          ЕСЛИ user = 'Lure_Of_Chaos' И comment.rating > 3
          ТОГДА comment.fake_rating = ОДНОЗНАЧНО
          Ответить
    • Этот тред мне больше не нужен. Он может идти.
      Ответить

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