- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要在水平和垂直居中的位图中绘制文本,调整文本大小以覆盖所有空间。问题是文本是多行的\n
。这是我当前的代码:
private int determineMaxTextSize(String str, float maxWidth) {
int size = 0;
if (TextUtils.isEmpty(str))
return 0;
Paint paint = new Paint();
do {
paint.setTextSize(++size);
} while (paint.measureText(str) < maxWidth);
return size > 0 ? size - 1 : 0;
}
private void drawText(String text, int textColor, int bckColor) {
TextPaint paint = new TextPaint(Paint.ANTI_ALIAS_FLAG);
int max = Integer.MAX_VALUE;
String[] tokens = text.split("\n");
for (String s : tokens) {
int m = determineMaxTextSize(s, params.width);
if (m > 0 && m < max)
max = m;
}
paint.setTextSize(max);
paint.setColor(textColor);
paint.setTextAlign(Paint.Align.CENTER);
Bitmap b = Bitmap.createBitmap(params.width + 1, params.height + 1, Bitmap.Config.ARGB_8888);
b.eraseColor(bckColor);
Canvas canvas = new Canvas(b);
Rect r = new Rect();
int xPos = canvas.getWidth() / 2;
int yPos = (canvas.getHeight() / 2);
for (String s : tokens) {
if (s.equals("\n"))
s = " ";
paint.getTextBounds(s, 0, s.length(), r);
canvas.drawText(s, xPos, yPos, paint);
yPos += Math.abs(r.height());
}
setImageBitmap(b);
}
此代码几乎可以工作,但文本从中心开始。
最佳答案
这是一个迟到的答案,所以如果不再需要它,我深表歉意,但在寻找答案后,我决定使用一些数学来解决这个问题。
为了让我的多行文本居中,我用 Canvas 的宽度减去文本的宽度,然后除以 2。这个数字然后用作 drawText
的 x 偏移量> 方法。
这是我的完整示例:
public static Bitmap textAsBitmap(String text, float textSize, int textColor, Context mContext) {
Paint paint = new Paint(ANTI_ALIAS_FLAG);
int pixel = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, textSize, mContext.getResources().getDisplayMetrics());
String[] str = text.split(",");
paint.setTextSize(pixel);
paint.setTypeface(FontUtils.getRalewayExtraBold(mContext));
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);
Bitmap image = Bitmap.createBitmap((width/str.length)+10, (height*str.length), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(image);
for (int i = 0; i < str.length; i++){
//Center text here
float textOffset = (canvas.getWidth()-paint.measureText((str[i])))/2;
canvas.drawText(str[i], textOffset, ((i+1)*baseline), paint);
}
return image;
}
关于android - Canvas drawtext 多行居中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41794212/
绘制文本选项 有一个 '画' 指定是否应绘制文本的表达式。 http://www.ffmpeg.org/ffmpeg-filters.html#drawtext-1 我发现我们可以使用以下表达式在特定
我正在使用 ffmpeg 库在特定时间在视频上绘制文本,我成功了 我正在使用此命令将文本从上到下移动,但我无法确定 x 和 Y 从 x,y 移动到特定 x,y ffmpeg -i VideoInput
我们正在尝试使用 ffmpeg drawtext 来支持印地语字体。但是数据的顺序是不正确的。 印地语文本的 unicode 是这样传递的 1. पिता माता िस्रफ 但输出呈现为 Outp
我正在开发一个对 FFmpeg 进行系统调用的应用程序。 我找到了一种方法来隔离和淡出 drawtext 过滤器,但是渲染时间增加了大约 5 倍。 我只是想看看我提出的命令是否有明显错误。 ffmpe
我正在尝试设置此 FFmpeg 命令的 drawtext 何时开始,我尝试使用 start_number 但看起来它不会成功。 ffmpeg -i 1.mp4 -acodec aac -keyint_
我正在尝试使用 ffmpeg drawtext 过滤器将藏文呈现为视频。但有些字符没有正确呈现。 例如: སྤྱི་སྟེགས Expected render output 一些垂直太长的字符无法正确
我使用 shell_exec 在 PHP 中运行以下命令: ffmpeg -i $sourcePath -vf \"drawtext=text='$txt':fontfile='$fontPath':
我正在使用 ffmpeg 库在特定时间在视频上绘制文本,我成功了 我正在使用此命令将文本从上到下移动,但我无法确定 x 和 Y 从 x,y 移动到特定 x,y ffmpeg -i VideoInput
我在 ffmpeg 中为 drawtext 使用以下参数 ffmpeg -i input.gif -vf drawtext="fontfile='ariblk.ttf':text=' Hello
我必须在视频开头添加声明符几秒钟,水平居中,绿色背景,如何使用单个命令来完成并覆盖现有视频而不重新编码 最佳答案 如果您愿意将免责声明图像转换为视频剪辑,则可以将两个视频合并为一个序列而无需重新编码。
是否可以在一个 ffmpeg 命令中包含电影覆盖和绘制文本。 我尝试了命令,但它给出了错误 [drawtext @ 03B2BBC0] Key '"fontsize' not found. [draw
将一些代码从 D2007 移植到 XE2 时,我遇到了一个我无法理解的编译器错误。请参阅以下示例: procedure TForm1.FormPaint(Sender: TObject); var
如何在一张图像上显示多行 我尝试了命令,但它给出了错误 [NULL @ 0203D780] Unable to find a suitable output format for '[in][T1]'
我正在 Canvas 上绘制关于现在轮到谁的信息。我使用 validate() 两次使屏幕无效并再次绘制文本。但是使用 invalidate() 我正在重绘所有板,这会持续很长时间,有什么方法可以使
我在 Win32 程序中使用 DrawText 函数在屏幕顶部中央显示“本地”,在中央显示“服务器”。当我运行程序时,它显示“本地”而不是“服务器”。这是我的消息循环中的代码: case WM_PAI
我想在屏幕 Canvas 上绘制与第一个字符串相邻的第二个字符串。第二个字符串的起点应该是第一个字符串的宽度。我使用了Android的paint.measuretext()方法。但它返回的宽度小于实际
我的主要目标是收集用户输入并将其转换为黑色背景的视频,然后输入文本将从左向右移动,同时视频在背景中播放音频。 目前有人建议我使用“drawtext”,但我发现它不起作用。 我的命令: ffmpeg -
有没有办法检测文本何时传递给 DrawText被剪掉了? 我希望能够在给定的矩形中绘制任何文本(即已被 DrawText 剪裁,这意味着用户可能会错过文本的某些重要部分)。 我想获得显示剪切文本所需的
我正在使用 DrawText 将一些文本绘制到我在插件中制作的一堆矩形中。 现在我从嵌入式 python 接收到一个字符指针: char *a=PyString_AsString(value); 当我
我目前正在创建一个图像编辑器,并尝试使用 canvas.drawText() 在图像上绘制文本。到目前为止,我已经成功地做到了这一点,但是当用户输入太长的文本时,文本只会在页面外的一行上继续,并且不会
我是一名优秀的程序员,十分优秀!