2011-11-21 30 views
1


J2ME:使用自定義字體(位圖)性能

我想在我的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秒的文字,我想把這段時間縮短到毫秒。這對我來說非常重要。

我可以使用線程嗎?如果是,如何?

+0

也許,你的問題與雙緩衝有關?繪製字體後,您是否嘗試刷新畫布或遊戲畫布?你用計數器檢查了這個函數的性能嗎?或者,只需用眼睛檢查一下? – Wonil

+0

首先,我創建了一個尺寸爲screen.then的圖像,然後從該圖像中獲取圖形(Graphics bg = bufferImage.getGraphics();),併爲該圖像繪製字形。然後在paint()方法中,我只繪製了bufferImage(對不起英語!!) –

+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。

+0

謝謝,我會看到上面的鏈接,並會在幾個小時後報告結果。 –

+0

通過從lwuit源代碼獲取想法編輯我的問題。但沒有區別(我不能使用lwuit庫,我必須使用我自己的方法進行文本渲染。) –

0

我建議你看看this庫。實施非常好,並利用行業標準設計模式(主要是享元模式)和強大的。

+0

謝謝,我測試了這個庫。但它也很重。它不支持RTL語言。 –