首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SKIA - measureText()返回的不准确值

SKIA - measureText()返回的不准确值
EN

Stack Overflow用户
提问于 2013-08-14 06:58:54
回答 2查看 2.8K关注 0票数 2

我在使用skia measureText()函数测量文本时遇到了问题。返回的值不准确。

代码语言:javascript
运行
复制
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中获得准确的文本宽度有什么想法吗?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-08 08:17:15

我相信你想要的比赛将来自“界”

代码语言:javascript
运行
复制
SkRect bounds;
SkScalar textWidth = paint.measureText("some", 4, &bounds);

它是适合给定文本的最小矩形,而textWidth则略大于该矩形。

票数 6
EN

Stack Overflow用户

发布于 2014-08-13 14:46:18

我也面临着这个问题。我不知道为什么会发生这种情况,也许是因为不同的原因,但我想到了以下几点:

代码语言:javascript
运行
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18225156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档