2011-06-19 35 views
1

我一直在爲複雜的文本渲染提供有限的支持,特別是缺少對連字和修整的阿拉伯文支持。儘管您可以通過使用特定的Unicode轉義代碼來顯示阿拉伯字符串來解決整形問題,但它不會正確顯示diacratics,因爲它會將它們呈現在彼此之上。通過避免構建在canvas.drawText中的複雜文本呈現 - 將文本呈現爲位圖然後在imageview中顯示的任何方式?

文本正確顯示,使用java.awt.Graphics2D中的圖形,但是未在Android的支持,該代碼是:

InputStream is = converter.class.getResourceAsStream("ARIAL.TTF"); 
Font font = Font.createFont(Font.TRUETYPE_FONT, is); 
Font medium_font = font.deriveFont(32f); 


BufferedImage sizedBufferedImage = new BufferedImage((rounded_width+10),(rounded_height+14), BufferedImage.TYPE_INT_ARGB); 
Graphics2D g_sized = sizedBufferedImage.createGraphics(); 
g_sized.setColor(Color.black); 
g_sized.setFont(medium_font); 
g_sized.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); 

g_sized.drawString(word_arabic, 5, 7+max_ascent); 

ByteArrayOutputStream imgoutstr = new ByteArrayOutputStream(); 
ImageIO.write(sizedBufferedImage, "png", imgoutstr); 

然後我可以用得到Graphics2D對象爲位圖的ImageIO類並最終將其顯示到ImageView中。我需要在運行時執行此操作,因爲字符串來自數據庫。

我的問題是我找不到任何替代方式寫入一個圖形對象,然後我可以最終進入一個可繪製/位圖顯示在android作爲一個ImageView的圖形對象,我試圖繞過androids文本渲染和使用完全支持unicode的替代文本渲染器,並且可以處理我需要的完整文本渲染。把它放到一個圖像中讓我可以讓android將逐字逐字顯示爲圖像,而不是試圖渲染它。

有沒有什麼方法可以將文本繪製到圖形對象而不是androids canvas中,最終將渲染的圖形對象放入android可以使用的位圖中? Androids canvas.drawString不能正確渲染字符串,並且對於複雜文本渲染文本的方式與Graphics2D不同。

回答

0

希望Honeycomb的複雜文本渲染系統很快就會融入到Android手機中。如果沒有全面支持複雜文本渲染,Android手機在阿拉伯,南亞和東南亞市場只能取得有限的成功。

谷歌很短暫地發佈了一種移動通信設備的操作系統,它沒有對世界上大多數語言使用的語言提供適當的底層支持。