我在使用skia measureText()函数测量文本时遇到了问题。返回的值不准确。
SkPaint *skPaint = new SkPaint();
SkTypeface* myFont = SkTypeface::CreateFromName("Impact", SkTypeface::kNormal);
skPaint->setTypeface(myFont);
skPaint->setAntiAlias(true);
skPaint->setTextAlign(SkPaint::kLeft_Align);
skPaint->setTextEncoding(SkPaint::kUTF16_TextEncoding);
skPaint->setTextSize(SkIntToScalar(120));
skPaint->setColor(0xff000001);
canvas->drawText(text, length, SkIntToScalar(x) , SkIntToScalar(y) , *skPaint);
SkScalar width = skPaint->measureText(text, length);
measureText()返回的宽度为451。
我检查了生成的位图文本通过一个照片编辑器应用程序,实际宽度只有438。
对如何在SKIA中获得准确的文本宽度有什么想法吗?
谢谢!
发布于 2014-06-08 08:17:15
我相信你想要的比赛将来自“界”
SkRect bounds;
SkScalar textWidth = paint.measureText("some", 4, &bounds);
它是适合给定文本的最小矩形,而textWidth则略大于该矩形。
发布于 2014-08-13 14:46:18
我也面临着这个问题。我不知道为什么会发生这种情况,也许是因为不同的原因,但我想到了以下几点:
SizeF RenderTextAndroid::GetStringSizeF() {
UpdateFont();
const base::string16& text = GetLayoutText();
std::vector<SkScalar> widths(text.length());
paint_.getTextWidths(text.c_str(), GetStrByteLen(text), &widths[0], NULL);
return SizeF(std::accumulate(widths.begin(), widths.end(), 0),
font_metrics_.fBottom - font_metrics_.fTop);
}
其中UpdateFont只是将新的参数设置为SkPaint
https://stackoverflow.com/questions/18225156
复制相似问题