Convert String text to Bitmap

前端 未结 5 1302
醉酒成梦
醉酒成梦 2020-12-02 13:29

Is it possible to convert string text that is inside an EditText box into a Bitmap? In other words, is there any way to convert string text into a Bitmap that m

相关标签:
5条回答
  • 2020-12-02 14:08

    You can create a Bitmap of the appropriate size, create a Canvas for the Bitmap, and then draw your text into it. You can use a Paint object to measure the text so you'll know the size needed for the bitmap. You can do something like this (untested):

    public Bitmap textAsBitmap(String text, float textSize, int textColor) {
        Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        paint.setTextSize(textSize);
        paint.setColor(textColor);
        paint.setTextAlign(Paint.Align.LEFT);
        float baseline = -paint.ascent(); // ascent() is negative
        int width = (int) (paint.measureText(text) + 0.5f); // round
        int height = (int) (baseline + paint.descent() + 0.5f);
        Bitmap image = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(image);
        canvas.drawText(text, 0, baseline, paint);
        return image;
    }
    
    0 讨论(0)
  • 2020-12-02 14:22

    For only String I don't know but,

    You will get Bitmap image of the whole EditText not only String with this,

    mEditText.setCursorVisible(false); 
    mEditText.buildDrawingCache(); 
    Bitmap bmp = Bitmap.createBitmap(mEditText.getDrawingCache()); 
    
    0 讨论(0)
  • 2020-12-02 14:30

    try this :

        public static Bitmap drawText(String text, int textWidth, int textSize) {
    // Get text dimensions
    TextPaint textPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG
    | Paint.LINEAR_TEXT_FLAG);
    textPaint.setStyle(Paint.Style.FILL);
    textPaint.setColor(Color.BLACK);
    textPaint.setTextSize(textSize);
    StaticLayout mTextLayout = new StaticLayout(text, textPaint,
    textWidth, Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false);
    
    // Create bitmap and canvas to draw to
    Bitmap b = Bitmap.createBitmap(textWidth, mTextLayout.getHeight(), Config.RGB_565);
    Canvas c = new Canvas(b);
    
    // Draw background
    Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG
    | Paint.LINEAR_TEXT_FLAG);
    paint.setStyle(Paint.Style.FILL);
    paint.setColor(Color.WHITE);
    c.drawPaint(paint);
    
    // Draw text
    c.save();
    c.translate(0, 0);
    mTextLayout.draw(c);
    c.restore();
    
    return b;
    }
    
    0 讨论(0)
  • 2020-12-02 14:31

    I've adapted @TedHopp's answer to ensure the image created is always square, which can be useful depending on where the image is to be displayed, such as in a NavigationDrawer icon or suchlike. The text is horizontally centered in the middle of the image.

    public static Bitmap textAsBitmap(String text, float textSize, int textColor) {
        // adapted from https://stackoverflow.com/a/8799344/1476989
        Paint paint = new Paint(ANTI_ALIAS_FLAG);
        paint.setTextSize(textSize);
        paint.setColor(textColor);
        paint.setTextAlign(Paint.Align.LEFT);
        float baseline = -paint.ascent(); // ascent() is negative
        int width = (int) (paint.measureText(text) + 0.0f); // round
        int height = (int) (baseline + paint.descent() + 0.0f);
    
        int trueWidth = width;
        if(width>height)height=width; else width=height;
        Bitmap image = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    
        Canvas canvas = new Canvas(image);
        canvas.drawText(text, width/2-trueWidth/2, baseline, paint);
        return image;
    }
    
    0 讨论(0)
  • 2020-12-02 14:31
    String text = "Hello world!";
    Bitmap b = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    Canvas c = new Canvas(b);
    c.drawBitmap(b, 0, 0, null);
    TextPaint textPaint = new TextPaint();
    textPaint.setAntiAlias(true);
    textPaint.setTextSize(16.0F);
    StaticLayout sl= new StaticLayout(text, textPaint, b.getWidth()-8, Alignment.ALIGN_CENTER, 1.0f, 0.0f, false);
    c.translate(6, 40);
    sl.draw(c);
    return b
    
    0 讨论(0)
提交回复
热议问题