j2me:使用自定义字体(位图)性能

时间:2011-11-21 05:07:01

标签: java-me fonts


我想在我的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());

但速度没有差异!!

任何帮助请!!


任何人都可以帮助我改进我的应用程序吗?

文本将在真实设备中2-3秒后出现此代码,我希望将此时间减少到毫秒。这对我来说非常重要。

我可以使用线程吗?如果是,怎么样?

2 个答案:

答案 0 :(得分:2)

我无法确定为什么您的代码在真实设备中的性能不佳。 但是,如何引用一些众所周知的开源J2ME库来检查它的文本绘图实现,例如LWUIT。

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

您可以从上面的链接中找到它的字体绘图实现。它使用drawImage而不是drawRegion。

答案 1 :(得分:0)

我建议你研究this库。实施非常好,并使用行业标准设计模式(主要是Flyweight模式)和健壮。