J2ME: использование пользовательских шрифтов (растровое изображение) производительность - PullRequest
1 голос
/ 21 ноября 2011

Я хочу использовать пользовательские шрифты в своем приложении j2me.поэтому я создал png-файл, содержащий все необходимые глифы и массив ширины глифов и еще один для смещения глифов в файле PNG.

Теперь я хочу визуализировать текст в моем приложении с использованием указанного выше шрифта в классе gameCanvas.но когда я использую следующий код, рендеринг текста на реальном устройстве происходит очень медленно.

Примечание: текст кодируется (для некоторых целей) в байты и сохраняется в переменной this.text.242 = [пробел], 241 = [\ n] и 243 = [\ r].

int textIndex = 0;
while(textIndex < this.text.length)
{
  int index = this.text[textIndex] & 0xFF;
  if(index > 243)
  {
      continue;
  }
  else if(index == 242) lineLeft += 3;
  else if(index == 241 || index == 243) 
  {
      top += font.getHeight();
      lineLeft = 0;
      continue;
  }
  else
  {
    lineLeft += widths[index];
    if(lineLeft <= getWidth()) 
        lineLeft = 0;
    int left = starts[index];
    int charWidth = widths[index];
    try{
        bg.drawRegion(font, left, 0, charWidth, font.getHeight(), 0, lineLeft, top, Graphics.LEFT|Graphics.TOP);
    }catch(Exception ee)
    {
    }
  }
  textIndex++;
}

Может ли кто-нибудь помочь мне улучшить производительность и скорость в моем коде?

В концеизвините за мой плохой английский и спасибо за продвинутый. :)

Редактировать: я изменил строку

 bg.drawRegion(font, left, 0, charWidth, font.getHeight(), 0, lineLeft, top, Graphics.LEFT|Graphics.TOP);

На:

bg.clipRect(left, top, charWidth, font.getHeight());
bg.drawImage(font, lineLeft - left, top,0)
bg.setClip(0, 0, getWidth(), getHeight());

но не было никакой разницы в скорости!!

любая помощь, пожалуйста !!


Может кто-нибудь PLZ помочь мне улучшить мое приложение?

текст появится через 2-3 секунды в реальном устройствеэтот код, я хочу сократить это время до миллисекунд.это очень важно для меня.

Могу ли я использовать темы?Если да, то как?

Ответы [ 2 ]

2 голосов
/ 21 ноября 2011

Я не могу понять, почему производительность вашего кода не так хороша на реальном устройстве.Но как насчет того, чтобы обратиться к некоторым известным библиотекам J2ME с открытым исходным кодом, чтобы проверить их реализацию рисования текста, например, LWUIT.

http://java.net/projects/lwuit/sources/svn/content/LWUIT_1_5/UI/src/com/sun/lwuit/CustomFont.java?rev=1628

Вы можете найти по приведенной выше ссылке, что это реализация рисования шрифтов.Он использует drawImage, а не drawRegion.

0 голосов
/ 22 ноября 2011

Я бы посоветовал вам заглянуть в эту библиотеку. Реализация довольно хорошая и использует стандартные шаблоны проектирования (преимущественно модель Flyweight) и надежна.

...