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

Java me j2me:使用自定义字体(位图)性能,java-me,fonts,Java Me,Fonts,我想在j2me应用程序中使用自定义字体。所以我创建了一个png文件,其中包含所有需要的字形和字形宽度数组,以及png文件中字形偏移的另一个数组 现在,我想在gameCanvas类中使用上述字体在我的应用程序中呈现文本。但当我使用下面的代码时,在真实设备中呈现文本的速度非常慢 注意:文本(出于某些目的)编码为字节,并存储在此.text变量中。242=[space],241=[\n]和243=[\r] int textIndex = 0; while(textIndex < this.text


我想在j2me应用程序中使用自定义字体。所以我创建了一个png文件,其中包含所有需要的字形和字形宽度数组,以及png文件中字形偏移的另一个数组

现在,我想在gameCanvas类中使用上述字体在我的应用程序中呈现文本。但当我使用下面的代码时,在真实设备中呈现文本的速度非常慢

注意:文本(出于某些目的)编码为字节,并存储在此.text变量中。242=[space],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++;
}
致:

但是速度没有差别

请帮忙


有人能帮我改进我的应用程序吗

文本将在2-3秒后出现在真实设备上,我想把这个时间减少到毫秒。这对我来说非常重要


我能用线吗?如果是,怎么做?

我不能确定为什么您的代码在实际设备中的性能不好。 但是,可以参考一些著名的开源J2ME库来检查它的文本绘制实现,例如LWiit


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

我建议您查看该库。该实现非常好,使用了行业标准的设计模式(主要是Flyweight模式)并且非常健壮。

谢谢,我将看到上面的链接,并在几个小时后报告结果。通过从lwuit源代码中获取想法编辑了我的问题。但是没有区别。(我不能使用lwuit库,我必须使用我自己的文本呈现方法。)也许,您的问题与双缓冲有关?绘制字体后是否尝试刷新画布或游戏画布?您是否使用计数器检查此功能的性能?或者,只是用眼睛检查一下?首先我创建了一个屏幕大小的图像。然后我从该图像中获取图形(graphics bg=bufferImage.getGraphics();)并为该图像绘制字形。然后在paint()方法中,我只绘制了bufferImage。(很抱歉英语不好!!)我用眼睛检查了性能!!!。完成将图示符绘制到bufferImage需要很多时间。我建议使用计数器(时间)检查性能。如果真的需要2秒来运行,那么用时间测量来测试你的函数怎么样。而且,如果不是这样的话,应该还有其他导致性能低下的原因。谢谢,我测试了这个库。但是它也很重。而且它不支持RTL语言。
 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());