2012-04-02 73 views

回答

5

这个(未经测试的)代码应该让你走上正确的轨道。

void foo(final String text) throws IOException{ 
    final Paint textPaint = new Paint() { 
     { 
      setColor(Color.WHITE); 
      setTextAlign(Paint.Align.LEFT); 
      setTextSize(20f); 
      setAntiAlias(true); 
     } 
    }; 
    final Rect bounds = new Rect(); 
    textPaint.getTextBounds(text, 0, text.length(), bounds); 

    final Bitmap bmp = Bitmap.createBitmap(bounds.width(), bounds.height(), Bitmap.Config.RGB_565); //use ARGB_8888 for better quality 
    final Canvas canvas = new Canvas(bmp); 
    canvas.drawText(text, 0, 20f, textPaint); 
    FileOutputStream stream = new FileOutputStream(...); //create your FileOutputStream here 
    bmp.compress(CompressFormat.PNG, 85, stream); 
    bmp.recycle(); 
    stream.close(); 
} 
+0

好,谢谢。我会测试它 – 2012-04-02 08:37:16

+0

它工作像火箭 – 2012-04-02 09:28:20

+0

问题是我不能给“\ n”在文本中,使其来到下一行 – 2012-04-02 09:38:58

0

这是你所需要的:

http://mvnrepository.com/artifact/org.apache.xmlgraphics/xmlgraphics-commons/1.3.1

,如果你想我可以为您提供的示例代码。

编辑:简单示例: package v13;

import java.awt.Component; 
import java.awt.Dimension; 
import java.awt.Graphics2D; 
import java.awt.image.BufferedImage; 
import java.io.FileOutputStream; 
import java.io.OutputStream; 

import javax.swing.JFileChooser; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 

import org.apache.xmlgraphics.image.codec.png.PNGImageEncoder; 

public class Deneme { 
    public static void main(String[]args){ 
     JFrame jf = new JFrame(); 
     jf.setVisible(true); 

     JPanel jp = new JPanel(); 
     jf.add(jp); 
     JLabel jl = new JLabel("trial text"); 
     jf.add(jl); 
     jf.setSize(300, 200); 

     JFileChooser jfc = new JFileChooser(); 
     int temp = jfc.showSaveDialog(jfc); 
     if (temp == JFileChooser.APPROVE_OPTION) { 
      System.out.println(jfc.getSelectedFile()); 
      Component myComponent = jf; 
      Dimension size = myComponent.getSize(); 
      BufferedImage myImage = new BufferedImage(size.width, 
        size.height, BufferedImage.TYPE_INT_RGB); 
      Graphics2D g2 = myImage.createGraphics(); 
      myComponent.paint(g2); 
      try { 
       OutputStream out = new FileOutputStream(jfc 
         .getSelectedFile().getAbsolutePath() 
         + ".png"); 
       PNGImageEncoder encoder = new PNGImageEncoder(out, null); 
       encoder.encode(myImage); 
       out.close(); 
      } catch (Exception e) { 
       System.out.println(e); 
      } 
     } 
     } 
    } 
+0

雅我想样本可以üPLZ提供 – NareshRavva 2012-09-04 11:50:26

6

我想多行文本的正确方法是这样的:

String text = "This \nis \nmultiline"; 

final Rect bounds = new Rect(); 
TextPaint textPaint = new TextPaint() { 
    { 
     setColor(Color.WHITE); 
     setTextAlign(Paint.Align.LEFT); 
     setTextSize(20f); 
     setAntiAlias(true); 
    } 
}; 
textPaint.getTextBounds(text, 0, text.length(), bounds); 
StaticLayout mTextLayout = new StaticLayout(text, textPaint, 
      bounds.width(), Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false); 
int maxWidth = -1; 
for (int i = 0; i < mTextLayout.getLineCount(); i++) { 
    if (maxWidth < mTextLayout.getLineWidth(i)) { 
     maxWidth = (int) mTextLayout.getLineWidth(i); 
    } 
} 
final Bitmap bmp = Bitmap.createBitmap(maxWidth , mTextLayout.getHeight(), 
      Bitmap.Config.ARGB_8888); 
bmp.eraseColor(Color.BLACK);// just adding black background 
final Canvas canvas = new Canvas(bmp); 
mTextLayout.draw(canvas); 
FileOutputStream stream = new FileOutputStream(...); //create your FileOutputStream here 
bmp.compress(CompressFormat.PNG, 85, stream); 
bmp.recycle(); 
stream.close(); 
+0

StaticLayout似乎只是Android ... – 2013-12-19 15:01:20

+0

问题被标记为Android所以... :) – 2013-12-19 16:39:04

+0

是的,留下评论作为一个警告像我这样的人谁谷歌带来一个非机器人搜索:) – 2013-12-19 16:56:48