簡體   English   中英

使用String創建位圖

[英]Create Bitmap using a String

我想使用String創建一個Bitmap 問題是當我將Paint和String分配給Canvas 所有我看到的是創建的點/黑色像素是我使用的配置有問題嗎? 這是我的代碼如下:

private void createBitmap(){
        int textSize = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 15, getApplicationContext().getResources().getDisplayMetrics());
        Paint paint = new Paint();
        paint.setAntiAlias(true);
        paint.setSubpixelText(true);
        paint.setStyle(Paint.Style.FILL);
        paint.setTextSize(textSize);
        paint.setColor(Color.BLACK);

        int w = 500, h = 200;

        Bitmap.Config conf = Bitmap.Config.ARGB_8888; // see other conf types
        Bitmap myBitmap = Bitmap.createBitmap(w, h, conf);
        Canvas myCanvas = new Canvas(myBitmap);
        myCanvas.drawColor(Color.WHITE, PorterDuff.Mode.CLEAR);
        myCanvas.drawText("Just a string", 0, 0, paint);

        imageView = new ImageView(this);
        imageView.setImageBitmap(myBitmap);
}

y參數實際上是文本的基線,因此您不會真正看到y == 0任何內容。 你看到的點可能是“字符串”中“g”的下降。

嘗試改為

        myCanvas.drawText("Just a string", 0, 100, paint);

所以至少你可以看到一些東西。

注意:您正在根據密度設置文本大小,但是您要使位圖成為絕對像素大小,因此您將不得不進行一些計算以獲得所需的外觀。

配置完Paint ,可以通過在Paint上調用getFontMetrics() ,然后查看FontMetrics值來確定文本的高度(以像素為getFontMetrics() ascent將是負面的,因為它向上測量,所以你可以通過fm.descent - fm.ascent大致了解高度。

這是一種在位圖頂部邊緣下方繪制文本的方法:

        Paint.FontMetrics fm = paint.getFontMetrics();
        int baseline = (int) - fm.ascent; // also fm.top instead of fm.ascent
        myCanvas.drawText("Just a string", 0, baseline, paint);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM