我一直在爲複雜的文本渲染提供有限的支持,特別是缺少對連字和修整的阿拉伯文支持。儘管您可以通過使用特定的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不同。